You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by to...@apache.org on 2017/10/18 19:25:30 UTC

[1/5] kudu git commit: twitter-demo: remove module

Repository: kudu
Updated Branches:
  refs/heads/master aa7d6a97b -> f96ab36ad


http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/ingest_firehose.cc
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/ingest_firehose.cc b/src/kudu/twitter-demo/ingest_firehose.cc
deleted file mode 100644
index cfb3086..0000000
--- a/src/kudu/twitter-demo/ingest_firehose.cc
+++ /dev/null
@@ -1,122 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-
-#include <fstream>  // IWYU pragma: keep
-#include <iostream>
-#include <string>
-#include <type_traits>
-#include <utility>
-
-#include <gflags/gflags.h>
-#include <glog/logging.h>
-
-#include "kudu/client/client.h"
-#include "kudu/client/shared_ptr.h"
-#include "kudu/gutil/gscoped_ptr.h"
-#include "kudu/gutil/move.h"
-#include "kudu/gutil/port.h"
-#include "kudu/twitter-demo/insert_consumer.h"
-#include "kudu/twitter-demo/twitter_streamer.h"
-#include "kudu/util/flags.h"
-#include "kudu/util/logging.h"
-#include "kudu/util/slice.h"
-#include "kudu/util/status.h"
-
-DEFINE_string(twitter_firehose_sink, "console",
-              "Where to write firehose output.\n"
-              "Valid values: console,rpc");
-DEFINE_string(twitter_rpc_master_address, "localhost",
-              "Address of master for the cluster to write to");
-
-DEFINE_string(twitter_firehose_source, "api",
-              "Where to obtain firehose input.\n"
-              "Valid values: api,file");
-DEFINE_string(twitter_firehose_file, "/dev/fd/0",
-              "File to read firehose data from, if 'file' is configured.");
-
-
-using std::string;
-
-namespace kudu {
-namespace twitter_demo {
-
-using client::sp::shared_ptr;
-
-// Consumer which simply logs messages to the console.
-class LoggingConsumer : public TwitterConsumer {
- public:
-  virtual void ConsumeJSON(const Slice& json) OVERRIDE {
-    std::cout << json.ToString();
-  }
-};
-
-gscoped_ptr<TwitterConsumer> CreateInsertConsumer() {
-  shared_ptr<client::KuduClient> client;
-  CHECK_OK(client::KuduClientBuilder()
-           .add_master_server_addr(FLAGS_twitter_rpc_master_address)
-           .Build(&client));
-
-  gscoped_ptr<InsertConsumer> ret(new InsertConsumer(client));
-  CHECK_OK(ret->Init());
-  return gscoped_ptr<TwitterConsumer>(std::move(ret)); // up-cast
-}
-
-static void IngestFromFile(const string& file, gscoped_ptr<TwitterConsumer> consumer) {
-  std::ifstream in(file.c_str());
-  CHECK(in.is_open()) << "Couldn't open " << file;
-
-  string line;
-  while (std::getline(in, line)) {
-    consumer->ConsumeJSON(line);
-  }
-}
-
-static int main(int argc, char** argv) {
-  // Since this is meant to be run by a user, not a daemon,
-  // log to stderr by default.
-  FLAGS_logtostderr = 1;
-  kudu::ParseCommandLineFlags(&argc, &argv, true);
-  kudu::InitGoogleLoggingSafe(argv[0]);
-
-  gscoped_ptr<TwitterConsumer> consumer;
-  if (FLAGS_twitter_firehose_sink == "console") {
-    consumer.reset(new LoggingConsumer);
-  } else if (FLAGS_twitter_firehose_sink == "rpc") {
-    consumer = CreateInsertConsumer();
-  } else {
-    LOG(FATAL) << "Unknown sink: " << FLAGS_twitter_firehose_sink;
-  }
-
-  if (FLAGS_twitter_firehose_source == "api") {
-    TwitterStreamer streamer(consumer.get());
-    CHECK_OK(streamer.Init());
-    CHECK_OK(streamer.Start());
-    CHECK_OK(streamer.Join());
-  } else if (FLAGS_twitter_firehose_source == "file") {
-    IngestFromFile(FLAGS_twitter_firehose_file, std::move(consumer));
-  } else {
-    LOG(FATAL) << "Unknown source: " << FLAGS_twitter_firehose_source;
-  }
-  return 0;
-}
-
-} // namespace twitter_demo
-} // namespace kudu
-
-int main(int argc, char** argv) {
-  return kudu::twitter_demo::main(argc, argv);
-}

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/insert_consumer.cc
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/insert_consumer.cc b/src/kudu/twitter-demo/insert_consumer.cc
deleted file mode 100644
index 946f3dc..0000000
--- a/src/kudu/twitter-demo/insert_consumer.cc
+++ /dev/null
@@ -1,119 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-
-#include "kudu/twitter-demo/insert_consumer.h"
-
-#include <ostream>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include <glog/logging.h>
-
-#include "kudu/client/client.h"
-#include "kudu/client/write_op.h"
-#include "kudu/common/partial_row.h"
-#include "kudu/gutil/gscoped_ptr.h"
-#include "kudu/gutil/stl_util.h"
-#include "kudu/twitter-demo/parser.h"
-#include "kudu/twitter-demo/twitter-schema.h"
-#include "kudu/util/status.h"
-
-using kudu::client::KuduInsert;
-using kudu::client::KuduClient;
-using kudu::client::KuduSession;
-using kudu::client::KuduTableCreator;
-using std::string;
-using std::vector;
-
-namespace kudu {
-namespace twitter_demo {
-
-InsertConsumer::InsertConsumer(client::sp::shared_ptr<KuduClient> client)
-  : initted_(false),
-    schema_(CreateTwitterSchema()),
-    client_(std::move(client)) {
-}
-
-Status InsertConsumer::Init() {
-  static const string kTableName = "twitter";
-  Status s = client_->OpenTable(kTableName, &table_);
-  if (s.IsNotFound()) {
-    gscoped_ptr<KuduTableCreator> table_creator(client_->NewTableCreator());
-    RETURN_NOT_OK_PREPEND(table_creator->table_name(kTableName)
-                          .schema(&schema_)
-                          .Create(),
-                          "Couldn't create twitter table");
-    s = client_->OpenTable(kTableName, &table_);
-  }
-  RETURN_NOT_OK_PREPEND(s, "Couldn't open twitter table");
-
-  session_ = client_->NewSession();
-  session_->SetTimeoutMillis(1000);
-  RETURN_NOT_OK(session_->SetFlushMode(KuduSession::AUTO_FLUSH_BACKGROUND));
-  initted_ = true;
-  return Status::OK();
-}
-
-InsertConsumer::~InsertConsumer() {
-  Status s(session_->Flush());
-  if (!s.ok()) {
-    bool overflow;
-    vector<client::KuduError*> errors;
-    ElementDeleter d(&errors);
-    session_->GetPendingErrors(&errors, &overflow);
-    for (const client::KuduError* error : errors) {
-      LOG(WARNING) << "Failed to insert row " << error->failed_op().ToString()
-                   << ": " << error->status().ToString();
-    }
-  }
-}
-
-void InsertConsumer::ConsumeJSON(const Slice& json_slice) {
-  CHECK(initted_);
-  string json = json_slice.ToString();
-  Status s = parser_.Parse(json, &event_);
-  if (!s.ok()) {
-    LOG(WARNING) << "Unable to parse JSON string: " << json << ": " << s.ToString();
-    return;
-  }
-
-  if (event_.type == DELETE_TWEET) {
-    // Not currently supported.
-    return;
-  }
-
-  string created_at = TwitterEventParser::ReformatTime(event_.tweet_event.created_at);
-
-  gscoped_ptr<KuduInsert> ins(table_->NewInsert());
-  KuduPartialRow* r = ins->mutable_row();
-  CHECK_OK(r->SetInt64("tweet_id", event_.tweet_event.tweet_id));
-  CHECK_OK(r->SetStringCopy("text", event_.tweet_event.text));
-  CHECK_OK(r->SetStringCopy("source", event_.tweet_event.source));
-  CHECK_OK(r->SetStringCopy("created_at", created_at));
-  CHECK_OK(r->SetInt64("user_id", event_.tweet_event.user_id));
-  CHECK_OK(r->SetStringCopy("user_name", event_.tweet_event.user_name));
-  CHECK_OK(r->SetStringCopy("user_description", event_.tweet_event.user_description));
-  CHECK_OK(r->SetStringCopy("user_location", event_.tweet_event.user_location));
-  CHECK_OK(r->SetInt32("user_followers_count", event_.tweet_event.user_followers_count));
-  CHECK_OK(r->SetInt32("user_friends_count", event_.tweet_event.user_friends_count));
-  CHECK_OK(r->SetStringCopy("user_image_url", event_.tweet_event.user_image_url));
-  CHECK_OK(session_->Apply(ins.release()));
-}
-
-} // namespace twitter_demo
-} // namespace kudu

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/insert_consumer.h
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/insert_consumer.h b/src/kudu/twitter-demo/insert_consumer.h
deleted file mode 100644
index 368215f..0000000
--- a/src/kudu/twitter-demo/insert_consumer.h
+++ /dev/null
@@ -1,65 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-#ifndef KUDU_TWITTER_DEMO_INSERT_CONSUMER_H
-#define KUDU_TWITTER_DEMO_INSERT_CONSUMER_H
-
-#include "kudu/twitter-demo/twitter_streamer.h"
-
-#include "kudu/client/schema.h"
-#include "kudu/client/shared_ptr.h"
-#include "kudu/gutil/port.h"
-#include "kudu/twitter-demo/parser.h"
-#include "kudu/util/slice.h"
-#include "kudu/util/status.h"
-
-namespace kudu {
-namespace client {
-class KuduClient;
-class KuduTable;
-class KuduSession;
-} // namespace client
-
-namespace twitter_demo {
-
-// Consumer of tweet data which parses the JSON and inserts
-// into a remote tablet via RPC.
-class InsertConsumer : public TwitterConsumer {
- public:
-  explicit InsertConsumer(client::sp::shared_ptr<client::KuduClient> client);
-  ~InsertConsumer();
-
-  Status Init();
-
-  virtual void ConsumeJSON(const Slice& json_slice) OVERRIDE;
-
- private:
-  bool initted_;
-
-  client::KuduSchema schema_;
-  TwitterEventParser parser_;
-
-  // Reusable object for latest event.
-  TwitterEvent event_;
-
-  client::sp::shared_ptr<client::KuduClient> client_;
-  client::sp::shared_ptr<client::KuduSession> session_;
-  client::sp::shared_ptr<client::KuduTable> table_;
-};
-
-} // namespace twitter_demo
-} // namespace kudu
-#endif

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/oauth-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/oauth-test.cc b/src/kudu/twitter-demo/oauth-test.cc
deleted file mode 100644
index 3b9e922..0000000
--- a/src/kudu/twitter-demo/oauth-test.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-
-
-#include "kudu/twitter-demo/oauth.h"
-
-#include <gtest/gtest.h>
-#include <string>
-
-#include "kudu/util/debug/leakcheck_disabler.h"
-
-using std::string;
-
-namespace kudu {
-namespace twitter_demo {
-
-// Test case from Appendix A of the OAuth 1.0 standard:
-// http://oauth.net/core/1.0/
-TEST(OAuthTest, TestSignature) {
-  const string kConsumerKey = "dpf43f3p2l4k3l03";
-  const string kConsumerSecret = "kd94hf93k423kf44";
-  const string kTokenKey = "nnch734d00sl2jdk";
-  const string kTokenSecret = "pfkkdhi9sl3r4s00";
-
-  // Necessary to squelch a leak originating in the NSS SSL library.
-  debug::ScopedLeakCheckDisabler disabler;
-
-  OAuthRequest req("GET", "http://photos.example.net/photos");
-
-  req.AddPair("oauth_consumer_key", kConsumerKey);
-  req.AddPair("oauth_token", kTokenKey);
-  req.AddPair("oauth_signature_method", "HMAC-SHA1");
-  req.AddPair("oauth_timestamp", "1191242096");
-  req.AddPair("oauth_nonce", "kllo9940pd9333jh");
-  req.AddPair("oauth_version", "1.0");
-  req.AddPair("file", "vacation.jpg");
-  req.AddPair("size", "original");
-  string base = req.SignatureBaseString();
-  ASSERT_EQ(string("GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacation.jpg%26"
-                   "oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26"
-                   "oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26"
-                   "oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal"),
-            base);
-
-  string sig = req.Signature(kConsumerSecret, kTokenSecret);
-  ASSERT_EQ("tR3+Ty81lMeYAr/Fid0kMTYa/WM=", sig);
-}
-
-
-} // namespace twitter_demo
-} // namespace kudu

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/oauth.cc
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/oauth.cc b/src/kudu/twitter-demo/oauth.cc
deleted file mode 100644
index 088463c..0000000
--- a/src/kudu/twitter-demo/oauth.cc
+++ /dev/null
@@ -1,128 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-
-#include "kudu/twitter-demo/oauth.h"
-
-#include <algorithm>
-#include <ctime>
-#include <vector>
-
-#include <glog/logging.h>
-extern "C" {
-#include <oauth.h>
-}
-
-#include "kudu/gutil/gscoped_ptr.h"
-#include "kudu/gutil/strings/util.h"
-
-using std::pair;
-using std::string;
-using std::vector;
-
-namespace kudu {
-namespace twitter_demo {
-
-static string EscapeUrl(const string& str) {
-  gscoped_ptr<char, FreeDeleter> enc(oauth_url_escape(str.c_str()));
-  return string(enc.get());
-}
-
-static string GenerateNonce() {
-  gscoped_ptr<char, FreeDeleter> ret(oauth_gen_nonce());
-  return string(ret.get());
-}
-
-
-OAuthRequest::OAuthRequest(const string& http_method,
-                           const string& url)
-  : http_method_(http_method),
-    url_(url) {
-}
-
-void OAuthRequest::AddStandardOAuthFields(const string& consumer_key,
-                                          const string& token_key) {
-  AddPair("oauth_version", "1.0");
-  AddPair("oauth_signature_method", "HMAC-SHA1");
-  AddPair("oauth_nonce", GenerateNonce());
-  AddPair("oauth_timestamp", std::to_string(time(nullptr)));
-  AddPair("oauth_consumer_key", consumer_key);
-  AddPair("oauth_token", token_key);
-}
-
-void OAuthRequest::AddPair(const string& key, const string& value) {
-  kv_pairs_.push_back(std::make_pair(key, value));
-}
-
-static bool ComparePair(const pair<std::string, std::string>& a,
-                        const pair<std::string, std::string>& b) {
-  if (a.first < b.first) return true;
-  else if (a.first > b.first) return false;
-
-  return a.second < b.second;
-}
-
-string OAuthRequest::SignatureBaseString() const {
-  vector<pair<string, string> > sorted_pairs(kv_pairs_);
-  std::sort(sorted_pairs.begin(), sorted_pairs.end(), &ComparePair);
-  string ret;
-  ret.append(http_method_);
-  ret.append("&");
-  ret.append(EscapeUrl(url_));
-
-  string kvpairs;
-  bool first = true;
-  for (const StringPair& p : sorted_pairs) {
-    if (!first) {
-      kvpairs.append("&");
-    }
-    first = false;
-    kvpairs.append(p.first);
-    kvpairs.append("=");
-    kvpairs.append(EscapeUrl(p.second));
-  }
-  ret.append("&");
-  ret.append(EscapeUrl(kvpairs));
-  return ret;
-}
-
-string OAuthRequest::Signature(const string& consumer_secret,
-                               const string& token_secret) const {
-  string base = SignatureBaseString();
-  string key = consumer_secret + "&" + token_secret;
-  gscoped_ptr<char, FreeDeleter> hmacced(
-    oauth_sign_hmac_sha1_raw(base.c_str(), base.size(), key.c_str(), key.size()));
-  CHECK(hmacced.get());
-  return string(hmacced.get());
-}
-
-string OAuthRequest::AuthHeader(const string& consumer_secret,
-                                const string& token_secret) const {
-  string sig = Signature(consumer_secret, token_secret);
-
-  string ret = "Authorization: OAuth realm=\"\"";
-  for (const StringPair& p : kv_pairs_) {
-    if (!HasPrefixString(p.first, "oauth_")) continue;
-    ret.append(", ");
-    ret.append(p.first).append("=\"").append(EscapeUrl(p.second)).append("\"");
-  }
-  ret.append(", oauth_signature_method=\"HMAC-SHA1\"");
-  ret.append(", oauth_signature=\"").append(EscapeUrl(sig)).append("\"");
-  return ret;
-}
-
-} // namespace twitter_demo
-} // namespace kudu

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/oauth.h
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/oauth.h b/src/kudu/twitter-demo/oauth.h
deleted file mode 100644
index b24f454..0000000
--- a/src/kudu/twitter-demo/oauth.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-#ifndef KUDU_TWITTERDEMO_OAUTH_H
-#define KUDU_TWITTERDEMO_OAUTH_H
-
-#include <gtest/gtest_prod.h>
-
-#include <string>
-#include <utility>
-#include <vector>
-
-namespace kudu {
-namespace twitter_demo {
-
-// An OpenAuth-authenticated request. See oauth-test.cc for
-// usage examples.
-class OAuthRequest {
- private:
-  typedef std::pair<std::string, std::string> StringPair;
-
- public:
-  OAuthRequest(const std::string& http_method,
-               const std::string& url);
-
-  // Add a key-value pair to the OAauth request.
-  void AddPair(const std::string& key, const std::string& value);
-
-  // Add the standard OAuth fields to the request, including
-  // generating a nonce and filling in the request timestamp.
-  void AddStandardOAuthFields(const std::string& consumer_key,
-                              const std::string& token_key);
-
-  // Generate the HTTP Authorization header to authenticate this request.
-  // This is the entire header, including the 'Authorization: ' prefix.
-  std::string AuthHeader(const std::string& consumer_secret,
-                         const std::string& token_secret) const;
-
- private:
-  FRIEND_TEST(OAuthTest, TestSignature);
-
-  std::string SignatureBaseString() const;
-  std::string Signature(const std::string& consumer_secret,
-                        const std::string& token_secret) const;
-
-  std::string http_method_;
-  std::string url_;
-
-  // The entries used in the request.
-  std::vector<StringPair > kv_pairs_;
-};
-
-} // namespace twitter_demo
-} // namespace kudu
-#endif

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/parser-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/parser-test.cc b/src/kudu/twitter-demo/parser-test.cc
deleted file mode 100644
index 8d34663..0000000
--- a/src/kudu/twitter-demo/parser-test.cc
+++ /dev/null
@@ -1,91 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-
-#include "kudu/twitter-demo/parser.h"
-
-#include <string>
-#include <vector>
-
-#include <glog/logging.h>
-#include <gtest/gtest.h>
-
-#include "kudu/gutil/strings/split.h"
-#include "kudu/util/env.h"
-#include "kudu/util/faststring.h"
-#include "kudu/util/path_util.h"
-#include "kudu/util/status.h"
-#include "kudu/util/test_macros.h"
-
-using std::string;
-using std::vector;
-
-namespace kudu {
-namespace twitter_demo {
-
-// Return the directory of the currently-running executable.
-static string GetExecutableDir() {
-  string exec;
-  CHECK_OK(Env::Default()->GetExecutablePath(&exec));
-  return DirName(exec);
-}
-
-static Status LoadFile(const string& name, vector<string>* lines) {
-  string path = JoinPathSegments(GetExecutableDir(), name);
-  faststring data;
-  RETURN_NOT_OK(ReadFileToString(Env::Default(), path, &data));
-
-  *lines = strings::Split(data.ToString(), "\n");
-  return Status::OK();
-}
-
-static void EnsureFileParses(const char* file, TwitterEventType expected_type) {
-  TwitterEventParser p;
-  TwitterEvent event;
-
-  SCOPED_TRACE(file);
-  vector<string> jsons;
-  CHECK_OK(LoadFile(file, &jsons));
-
-  int line_number = 1;
-  for (const string& json : jsons) {
-    if (json.empty()) continue;
-    SCOPED_TRACE(json);
-    SCOPED_TRACE(line_number);
-    ASSERT_OK(p.Parse(json, &event));
-    ASSERT_EQ(expected_type, event.type);
-    line_number++;
-  }
-}
-
-// example-tweets.txt includes a few hundred tweets collected
-// from the sample hose.
-TEST(ParserTest, TestParseTweets) {
-  EnsureFileParses("example-tweets.txt", TWEET);
-}
-
-// example-deletes.txt includes a few hundred deletes collected
-// from the sample hose.
-TEST(ParserTest, TestParseDeletes) {
-  EnsureFileParses("example-deletes.txt", DELETE_TWEET);
-}
-
-TEST(ParserTest, TestReformatTime) {
-  ASSERT_EQ("20130814063107", TwitterEventParser::ReformatTime("Wed Aug 14 06:31:07 +0000 2013"));
-}
-
-} // namespace twitter_demo
-} // namespace kudu

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/parser.cc
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/parser.cc b/src/kudu/twitter-demo/parser.cc
deleted file mode 100644
index 7df1793..0000000
--- a/src/kudu/twitter-demo/parser.cc
+++ /dev/null
@@ -1,103 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-
-#include "kudu/twitter-demo/parser.h"
-
-#include <cstring>
-#include <ctime>
-
-#include <glog/logging.h>
-#include <rapidjson/document.h>
-
-#include "kudu/gutil/stringprintf.h"
-#include "kudu/util/jsonreader.h"
-
-namespace kudu {
-namespace twitter_demo {
-
-TwitterEventParser::TwitterEventParser() {
-}
-
-TwitterEventParser::~TwitterEventParser() {
-}
-
-static Status ParseDelete(const JsonReader& r,
-                          const rapidjson::Value* delete_obj,
-                          TwitterEvent* event) {
-  event->type = DELETE_TWEET;
-  DeleteTweetEvent* e = &event->delete_event;
-
-  const rapidjson::Value* status_obj;
-  RETURN_NOT_OK(r.ExtractObject(delete_obj, "status", &status_obj));
-  RETURN_NOT_OK(r.ExtractInt64(status_obj, "id", &e->tweet_id));
-  RETURN_NOT_OK(r.ExtractInt64(status_obj, "user_id", &e->user_id));
-  return Status::OK();
-}
-
-static Status ParseTweet(const JsonReader& r,
-                         TwitterEvent* event) {
-  event->type = TWEET;
-  TweetEvent* e = &event->tweet_event;
-
-  RETURN_NOT_OK(r.ExtractString(r.root(), "created_at", &e->created_at));
-  RETURN_NOT_OK(r.ExtractInt64(r.root(), "id", &e->tweet_id));
-  RETURN_NOT_OK(r.ExtractString(r.root(), "text", &e->text));
-  RETURN_NOT_OK(r.ExtractString(r.root(), "source", &e->source));
-
-  const rapidjson::Value* user_obj;
-  RETURN_NOT_OK(r.ExtractObject(r.root(), "user", &user_obj));
-  RETURN_NOT_OK(r.ExtractInt64(user_obj, "id", &e->user_id));
-  RETURN_NOT_OK(r.ExtractString(user_obj, "name", &e->user_name));
-  RETURN_NOT_OK(r.ExtractString(user_obj, "location", &e->user_location));
-  RETURN_NOT_OK(r.ExtractString(user_obj, "description", &e->user_description));
-  RETURN_NOT_OK(r.ExtractInt32(user_obj, "followers_count", &e->user_followers_count));
-  RETURN_NOT_OK(r.ExtractInt32(user_obj, "friends_count", &e->user_friends_count));
-  RETURN_NOT_OK(r.ExtractString(user_obj, "profile_image_url", &e->user_image_url));
-
-  return Status::OK();
-}
-
-Status TwitterEventParser::Parse(const std::string& json, TwitterEvent* event) {
-  JsonReader r(json);
-  RETURN_NOT_OK(r.Init());
-  const rapidjson::Value* delete_obj;
-  Status s = r.ExtractObject(r.root(), "delete", &delete_obj);
-  if (s.IsNotFound()) {
-    return ParseTweet(r, event);
-  }
-  RETURN_NOT_OK(s);
-  return ParseDelete(r, delete_obj, event);
-}
-
-std::string TwitterEventParser::ReformatTime(const std::string& twitter_time) {
-  struct tm t;
-  memset(&t, 0, sizeof(t));
-  // Example: Wed Aug 14 06:31:07 +0000 2013
-  char* x = strptime(twitter_time.c_str(), "%a %b %d %H:%M:%S +0000 %Y", &t);
-  if (*x != '\0') {
-    return StringPrintf("unparseable date, date=%s, leftover=%s", twitter_time.c_str(), x);
-  }
-
-  char buf[100];
-  size_t n = strftime(buf, arraysize(buf), "%Y%m%d%H%M%S", &t);
-  CHECK_GT(n, 0);
-  return buf;
-}
-
-
-} // namespace twitter_demo
-} // namespace kudu

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/parser.h
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/parser.h b/src/kudu/twitter-demo/parser.h
deleted file mode 100644
index 9973428..0000000
--- a/src/kudu/twitter-demo/parser.h
+++ /dev/null
@@ -1,86 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-#ifndef KUDU_TWITTER_DEMO_PARSER_H
-#define KUDU_TWITTER_DEMO_PARSER_H
-
-#include <cstdint>
-#include <string>
-
-#include "kudu/gutil/macros.h"
-#include "kudu/util/status.h"
-
-namespace kudu {
-namespace twitter_demo {
-
-enum TwitterEventType {
-  NONE = 0,
-  TWEET = 1,
-  DELETE_TWEET = 2
-};
-
-
-struct TweetEvent {
-  int64_t tweet_id;
-  std::string text;
-  std::string source;
-  std::string created_at;
-  // TODO: add geolocation
-  int64_t user_id;
-  std::string user_name;
-  std::string user_description;
-  std::string user_location;
-  int32_t user_followers_count;
-  int32_t user_friends_count;
-  std::string user_image_url;
-};
-
-struct DeleteTweetEvent {
-  int64_t tweet_id;
-  int64_t user_id;
-};
-
-struct TwitterEvent {
-  TwitterEvent() : type(NONE) {}
-
-  // The type of event. Only one of the various events below will
-  // be valid, depending on this type value.
-  TwitterEventType type;
-
-  // The different event types. These are separate fields rather than
-  // a union so that we can reuse string storage when parsing multiple
-  // events.
-
-  TweetEvent tweet_event;
-  DeleteTweetEvent delete_event;
-};
-
-class TwitterEventParser {
- public:
-  TwitterEventParser();
-  ~TwitterEventParser();
-
-  Status Parse(const std::string& json, TwitterEvent* event);
-
-  static std::string ReformatTime(const std::string& time);
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TwitterEventParser);
-};
-
-} // namespace twitter_demo
-} // namespace kudu
-#endif

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/twitter-schema.h
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/twitter-schema.h b/src/kudu/twitter-demo/twitter-schema.h
deleted file mode 100644
index d54d51c..0000000
--- a/src/kudu/twitter-demo/twitter-schema.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-//
-// Inline functions to create the Twitter schema
-#ifndef KUDU_TWITTER_DEMO_TWITTER_SCHEMA_H
-#define KUDU_TWITTER_DEMO_TWITTER_SCHEMA_H
-
-#include "kudu/client/schema.h"
-
-namespace kudu {
-namespace twitter_demo {
-
-inline client::KuduSchema CreateTwitterSchema() {
-  using client::KuduColumnSchema;
-
-  client::KuduSchema s;
-  client::KuduSchemaBuilder b;
-  b.AddColumn("tweet_id")->Type(KuduColumnSchema::INT64)->NotNull()->PrimaryKey();
-  b.AddColumn("text")->Type(KuduColumnSchema::STRING)->NotNull();
-  b.AddColumn("source")->Type(KuduColumnSchema::STRING)->NotNull();
-  b.AddColumn("created_at")->Type(KuduColumnSchema::STRING)->NotNull();
-  b.AddColumn("user_id")->Type(KuduColumnSchema::INT64)->NotNull();
-  b.AddColumn("user_name")->Type(KuduColumnSchema::STRING)->NotNull();
-  b.AddColumn("user_description")->Type(KuduColumnSchema::STRING)->NotNull();
-  b.AddColumn("user_location")->Type(KuduColumnSchema::STRING)->NotNull();
-  b.AddColumn("user_followers_count")->Type(KuduColumnSchema::INT32)->NotNull();
-  b.AddColumn("user_friends_count")->Type(KuduColumnSchema::INT32)->NotNull();
-  b.AddColumn("user_image_url")->Type(KuduColumnSchema::STRING)->NotNull();
-  CHECK_OK(b.Build(&s));
-  return s;
-}
-
-} // namespace twitter_demo
-} // namespace kudu
-#endif
-
-/*
-
-Schema for Impala:
-
-CREATE TABLE twitter (
-  tweet_id bigint,
-  text string,
-  source string,
-  created_at string,
-  user_id bigint,
-  user_name string,
-  user_description string,
-  user_location string,
-  user_followers_count int,
-  user_friends_count int,
-  user_image_url string);
-
-
-Schema for MySQL:
-
-CREATE TABLE twitter (
-  tweet_id bigint not null primary key,
-  tweet_text varchar(1000) not null,
-  source varchar(1000) not null,
-  created_at varchar(1000) not null,
-  user_id bigint not null,
-  user_name varchar(1000) not null,
-  user_description varchar(1000) not null,
-  user_location varchar(1000) not null,
-  user_followers_count int not null,
-  user_friends_count int not null,
-  user_image_url varchar(1000) not null);
-
-*/

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/twitter_streamer.cc
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/twitter_streamer.cc b/src/kudu/twitter-demo/twitter_streamer.cc
deleted file mode 100644
index b55ad22..0000000
--- a/src/kudu/twitter-demo/twitter_streamer.cc
+++ /dev/null
@@ -1,206 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-
-#include "kudu/twitter-demo/twitter_streamer.h"
-
-#include <cstdint>
-#include <cstring>
-#include <mutex>
-#include <ostream>
-#include <string>
-#include <thread>
-
-#include <curl/curl.h>
-#include <gflags/gflags.h>
-#include <glog/logging.h>
-
-#include "kudu/twitter-demo/oauth.h"
-#include "kudu/gutil/macros.h"
-#include "kudu/gutil/once.h"
-#include "kudu/util/slice.h"
-#include "kudu/util/status.h"
-
-using std::string;
-using std::thread;
-
-const char* kTwitterUrl = "https://stream.twitter.com/1.1/statuses/sample.json";
-
-// Defaults are for the "kudu-demo" app under the "KuduProject" account.
-// See https://dev.twitter.com/apps/4906821/oauth if you have credentials.
-DEFINE_string(twitter_consumer_key, "lRXXfnhNGhFO1DdAorVJeQ",
-              "Twitter API consumer key");
-DEFINE_string(twitter_consumer_secret, "5Enn1Uwy3mHdhwSVrJEbd24whGiHsA2YGJ0O28E",
-              "Twitter API consumer secret");
-DEFINE_string(twitter_token_key, "1653869436-7QncqwFkMaOS6rWNeHpwNQZ8li1CFbJp0QNOEpE",
-              "Twitter API access token key");
-DEFINE_string(twitter_token_secret, "1t3UPOJc6nkThvBPcCPGAj3gHB3mB97F3zraoRkKMA",
-              "Twitter API access token secret");
-
-namespace kudu {
-namespace twitter_demo {
-
-////////////////////////////////////////////////////////////
-// Curl utilities
-////////////////////////////////////////////////////////////
-
-static void DoInitCurl() {
-  CHECK_EQ(0, curl_global_init(CURL_GLOBAL_ALL));
-}
-
-static void InitCurl() {
-  static GoogleOnceType once = GOOGLE_ONCE_INIT;
-  GoogleOnceInit(&once, &DoInitCurl);
-}
-
-// Scope-based deleters for various libcurl types.
-template<class CurlType>
-class CurlDeleter {
- public:
-  explicit CurlDeleter(CurlType* curl) : curl_(curl) {}
-  ~CurlDeleter() {
-    if (curl_) DoFree();
-  }
- private:
-  // Will be specialized for each type.
-  void DoFree();
-  CurlType* curl_;
-
-  DISALLOW_COPY_AND_ASSIGN(CurlDeleter);
-};
-
-template<>
-void CurlDeleter<CURL>::DoFree() {
-  curl_easy_cleanup(curl_);
-}
-
-template<>
-void CurlDeleter<curl_slist>::DoFree() {
-  curl_slist_free_all(curl_);
-}
-
-////////////////////////////////////////////////////////////
-// TwitterStreamer implementation
-////////////////////////////////////////////////////////////
-
-Status TwitterStreamer::Init() {
-  if (FLAGS_twitter_consumer_key.empty()) {
-    return Status::InvalidArgument("Missing flag", "--twitter_consumer_key");
-  }
-  if (FLAGS_twitter_consumer_secret.empty()) {
-    return Status::InvalidArgument("Missing flag", "--twitter_consumer_secret");
-  }
-  if (FLAGS_twitter_token_key.empty()) {
-    return Status::InvalidArgument("Missing flag", "--twitter_token_key");
-  }
-  if (FLAGS_twitter_token_secret.empty()) {
-    return Status::InvalidArgument("Missing flag", "--twitter_token_secret");
-  }
-  return Status::OK();
-}
-
-Status TwitterStreamer::Start() {
-  CHECK(!thread_.joinable());
-
-  thread_ = thread(&TwitterStreamer::StreamThread, this);
-  return Status::OK();
-}
-
-Status TwitterStreamer::Join() {
-  thread_.join();
-  return stream_status_;
-}
-
-// C-style curl callback for data
-size_t DataReceivedCallback(void* buffer, size_t size, size_t nmemb, void* user_ptr) {
-  TwitterStreamer* streamer = DCHECK_NOTNULL(reinterpret_cast<TwitterStreamer*>(user_ptr));
-  size_t total_size = size * nmemb;
-  Slice data(reinterpret_cast<const uint8_t*>(buffer), total_size);
-  return streamer->DataReceived(data);
-}
-
-void TwitterStreamer::StreamThread() {
-  Status s = DoStreaming();
-  if (!s.ok()) {
-    LOG(ERROR) << "Streaming thread failed: " << s.ToString();
-    std::lock_guard<std::mutex> l(lock_);
-    stream_status_ = s;
-  }
-}
-
-Status TwitterStreamer::DoStreaming() {
-  OAuthRequest req("GET", kTwitterUrl);
-  req.AddStandardOAuthFields(FLAGS_twitter_consumer_key, FLAGS_twitter_token_key);
-  string auth_header = req.AuthHeader(FLAGS_twitter_consumer_secret, FLAGS_twitter_token_secret);
-  VLOG(1) << auth_header;
-
-  InitCurl();
-  CURL* curl = curl_easy_init();
-  CurlDeleter<CURL> delete_curl(curl);
-  if (!curl) {
-    return Status::NetworkError("curl_easy_init failed");
-  }
-  CHECK(curl);
-
-  // Disable SSL verification so we don't have to set up a
-  // trust store database of any kind.
-  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
-  curl_easy_setopt(curl, CURLOPT_URL, kTwitterUrl);
-  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, DataReceivedCallback);
-  curl_easy_setopt(curl, CURLOPT_WRITEDATA, this);
-
-  struct curl_slist* headers = NULL;
-  CurlDeleter<curl_slist> delete_headers(headers);
-  headers = curl_slist_append(headers, auth_header.c_str());
-
-  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
-
-  CURLcode res = curl_easy_perform(curl);
-  if (res != CURLE_OK) {
-    return Status::NetworkError("curl_easy_perfom failed", curl_easy_strerror(res));
-  }
-
-  return Status::OK();
-}
-
-size_t TwitterStreamer::DataReceived(const Slice& slice) {
-  recv_buf_.append(slice.data(), slice.size());
-
-  // Chop the received data into lines.
-  while (true) {
-    void* newline_ptr = memchr(recv_buf_.data(), '\n', recv_buf_.size());
-    if (newline_ptr == NULL) {
-      // no newlines
-      break;
-    }
-    int newline_idx = reinterpret_cast<uintptr_t>(newline_ptr) -
-      reinterpret_cast<uintptr_t>(recv_buf_.data());
-
-    Slice line(recv_buf_.data(), newline_idx);
-    consumer_->ConsumeJSON(line);
-
-    // Copy remaining data back to front of the buffer
-    int rem_size = recv_buf_.size() - newline_idx - 1;
-    memmove(recv_buf_.data(), &recv_buf_[newline_idx + 1], rem_size);
-    // Resize to only have the front
-    recv_buf_.resize(rem_size);
-  }
-
-  return slice.size();
-}
-
-} // namespace twitter_demo
-} // namespace kudu

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/twitter_streamer.h
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/twitter_streamer.h b/src/kudu/twitter-demo/twitter_streamer.h
deleted file mode 100644
index 37c1514..0000000
--- a/src/kudu/twitter-demo/twitter_streamer.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-#ifndef KUDU_TWITTER_DEMO_TWITTER_STREAMER_H
-#define KUDU_TWITTER_DEMO_TWITTER_STREAMER_H
-
-#include <cstddef>
-#include <mutex>
-#include <thread>
-
-#include "kudu/gutil/macros.h"
-#include "kudu/util/faststring.h"
-#include "kudu/util/slice.h"
-#include "kudu/util/status.h"
-
-namespace kudu {
-namespace twitter_demo {
-
-class TwitterConsumer {
- public:
-  virtual void ConsumeJSON(const Slice& json) = 0;
-  virtual ~TwitterConsumer() {}
-};
-
-class TwitterStreamer {
- public:
-  explicit TwitterStreamer(TwitterConsumer* consumer)
-    : consumer_(consumer) {
-  }
-
-  Status Init();
-  Status Start();
-  Status Join();
-
- private:
-  friend size_t DataReceivedCallback(void* buffer, size_t size, size_t nmemb, void* user_ptr);
-  void StreamThread();
-  Status DoStreaming();
-  size_t DataReceived(const Slice& data);
-
-  std::thread thread_;
-  std::mutex lock_;
-  Status stream_status_;
-
-  faststring recv_buf_;
-
-  TwitterConsumer* consumer_;
-
-  DISALLOW_COPY_AND_ASSIGN(TwitterStreamer);
-};
-
-
-} // namespace twitter_demo
-} // namespace kudu
-#endif


[2/5] kudu git commit: twitter-demo: remove module

Posted by to...@apache.org.
http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/example-tweets.txt
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/example-tweets.txt b/src/kudu/twitter-demo/example-tweets.txt
deleted file mode 100644
index fc577ac..0000000
--- a/src/kudu/twitter-demo/example-tweets.txt
+++ /dev/null
@@ -1,505 +0,0 @@
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217605238784,"id_str":"365611217605238784","text":"@JaredLeto u look like fish!","source":"web","truncated":false,"in_reply_to_status_id":365590910525911040,"in_reply_to_status_id_str":"365590910525911040","in_reply_to_user_id":27711339,"in_reply_to_user_id_str":"27711339","in_reply_to_screen_name":"JaredLeto","user":{"id":328473738,"id_str":"328473738","name":"Ula M.","screen_name":"tomula483","location":"Szczecin","url":null,"description":null,"protected":false,"followers_count":12,"friends_count":55,"listed_count":0,"created_at":"Sun Jul 03 12:53:42 +0000 2011","favourites_count":64,"utc_offset":7200,"time_zone":"Warsaw","geo_enabled":true,"verified":false,"statuses_count":261,"lang":"pl","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/i
 mages\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2907863190\/71913cdd9e92ac2c7db48d76e5b036bb_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2907863190\/71913cdd9e92ac2c7db48d76e5b036bb_normal.jpeg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"JaredLeto","name":"JARED LETO","id":27711339,"id_str":"27711339","indices":[0,10]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"en"}
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217601040384,"id_str":"365611217601040384","text":"@preetskapreet i already knew that...","source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":364568088831721473,"in_reply_to_status_id_str":"364568088831721473","in_reply_to_user_id":526734170,"in_reply_to_user_id_str":"526734170","in_reply_to_screen_name":"preetskapreet","user":{"id":103636562,"id_str":"103636562","name":"\u2600  h a r v i t \u0a74","screen_name":"itsharvit","location":"COLE WORLD","url":"http:\/\/hiddensunsets.tumblr.com\/","description":"happiness. dreamer. i love god \u0a74 and i live for the music & moments. oh and i love j cole, kid cudi & the maine. instagram;harvitgill #allabout18 #celtics","protected":false,"followers_count":626,"friends_count":304,"listed_count":67,"created_at":"Sun Jan 10 18:47:18 +0000 2010","favourites_count":1534,"utc
 _offset":-25200,"time_zone":"Pacific Time (US & Canada)","geo_enabled":false,"verified":false,"statuses_count":14750,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"DE4063","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/767224620\/c8abbd3e1f2f5489a8e628ce0788b8fd.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/767224620\/c8abbd3e1f2f5489a8e628ce0788b8fd.jpeg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000163005610\/d1db2a626b77a937ca99c73033567352_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000163005610\/d1db2a626b77a937ca99c73033567352_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/103636562\/1357330434","profile_link_color":"55BA84","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"000000","profile_text_color":"0
 0FF51","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"preetskapreet","name":"SWIZZY PREET","id":526734170,"id_str":"526734170","indices":[0,14]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"en"}
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217592664064,"id_str":"365611217592664064","text":"@selenabtch &lt;333 ofuscamos as inimigas ioddkf","source":"web","truncated":false,"in_reply_to_status_id":365609863348371458,"in_reply_to_status_id_str":"365609863348371458","in_reply_to_user_id":1628683730,"in_reply_to_user_id_str":"1628683730","in_reply_to_screen_name":"selenabtch","user":{"id":619520802,"id_str":"619520802","name":"1 M\u00caS DE SIEGE \u2654","screen_name":"ops_zarry","location":"London ","url":"http:\/\/pudim.com.br","description":"monie \u2661 vic \u2661 lah \u2661 jujubs \u2661 paula matos \u2661 selena \u2661 fl\u00e1 \u2661 lolla \u2661 grazi \u2661 nath \u2661 rafa \u2661","protected":false,"followers_count":1124,"friends_count":1023,"listed_count":0,"created_at":"Tue Jun 26 21:33:26 +0000 2012","favourites_count":158,"utc_offset":-10800,"time_zone":"Brasilia","geo_enabled":false,"verified":false,"statuses_count":6977,"lang":"pt","contributors_enabl
 ed":false,"is_translator":false,"profile_background_color":"DBE9ED","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/378800000047181213\/fbf82571a09ad8c426cac8c97e5a1664.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000047181213\/fbf82571a09ad8c426cac8c97e5a1664.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000259667631\/fc6a4d51ca02ef63404c0913c7884bfa_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000259667631\/fc6a4d51ca02ef63404c0913c7884bfa_normal.png","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/619520802\/1375962482","profile_link_color":"111EAD","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sen
 t":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"selenabtch","name":"laus","id":1628683730,"id_str":"1628683730","indices":[0,11]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"es"}
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217588465664,"id_str":"365611217588465664","text":"@pleasefilipe hahahhaha","source":"web","truncated":false,"in_reply_to_status_id":365610934288384001,"in_reply_to_status_id_str":"365610934288384001","in_reply_to_user_id":1339764966,"in_reply_to_user_id_str":"1339764966","in_reply_to_screen_name":"pleasefilipe","user":{"id":158503687,"id_str":"158503687","name":"Vict\u00f3ria","screen_name":"locaporsophied","location":"","url":"https:\/\/twitter.com\/sophiaabrahao\/status\/347748097889284096","description":"Tepenico,nico,nico...","protected":false,"followers_count":1731,"friends_count":1422,"listed_count":1,"created_at":"Tue Jun 22 21:58:34 +0000 2010","favourites_count":1056,"utc_offset":-14400,"time_zone":"Santiago","geo_enabled":false,"verified":false,"statuses_count":25415,"lang":"pt","contributors_enabled":false,"is_translator":false,"profile_background_color":"FFFFFF","profile_background_image_url":"http:\/\/a0.twimg.c
 om\/profile_background_images\/378800000041688451\/475a3c2abd6d7d346075ada536cda7e5.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000041688451\/475a3c2abd6d7d346075ada536cda7e5.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000246663393\/0514008d1393b1a9a6cd60093ebd4959_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000246663393\/0514008d1393b1a9a6cd60093ebd4959_normal.png","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/158503687\/1375373203","profile_link_color":"000000","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"FFCCEB","profile_text_color":"FF00D5","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entitie
 s":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"pleasefilipe","name":"Julie e Vick","id":1339764966,"id_str":"1339764966","indices":[0,13]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"tl"}
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217605246976,"id_str":"365611217605246976","text":"@JohnnyBGoode77 @lnsomni0 s\u00ed, me encant\u00f3","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":365610752880553987,"in_reply_to_status_id_str":"365610752880553987","in_reply_to_user_id":250319865,"in_reply_to_user_id_str":"250319865","in_reply_to_screen_name":"JohnnyBGoode77","user":{"id":296471716,"id_str":"296471716","name":"Pati","screen_name":"TuiteraMx","location":"","url":null,"description":"Esta soy yo, la lavandera de mi ropa ajena. Mastuerzo dixit","protected":false,"followers_count":5803,"friends_count":4975,"listed_count":43,"created_at":"Tue May 10 20:28:37 +0000 2011","favourites_count":20022,"utc_offset":7200,"time_zone":"Amsterdam","geo_enabled":false,"verified":false,"statuses_count":86844,"lang":"es","contributors_enabled":false,"is_transla
 tor":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/887155720\/deebcae8569aa99810b98c77ab395cf3.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/887155720\/deebcae8569aa99810b98c77ab395cf3.jpeg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/3762983582\/500cde9354ab64d2861997d601206884_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/3762983582\/500cde9354ab64d2861997d601206884_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/296471716\/1370524598","profile_link_color":"0084B4","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinate
 s":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"JohnnyBGoode77","name":"Johnny Rotten","id":250319865,"id_str":"250319865","indices":[0,15]},{"screen_name":"lnsomni0","name":"Nocturna...","id":464084771,"id_str":"464084771","indices":[16,25]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"es"}
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217617829888,"id_str":"365611217617829888","text":"RT @pataxula24: De botellon con los amigos de @AsocJuvAlhucema http:\/\/t.co\/wM8NkOU2XS","source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":621188704,"id_str":"621188704","name":"Antonio B.C.","screen_name":"aburca1289","location":"jaen","url":null,"description":null,"protected":false,"followers_count":241,"friends_count":346,"listed_count":1,"created_at":"Thu Jun 28 18:02:49 +0000 2012","favourites_count":5,"utc_offset":null,"time_zone":null,"geo_enabled":true,"verified":false,"statuses_count":1485,"lang":"es","contributors_enabled":false,"is_translator":false,"profile_background_color":"FFF04D","profile_background_image_u
 rl":"http:\/\/a0.twimg.com\/images\/themes\/theme19\/bg.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme19\/bg.gif","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000164404708\/cba974d2aa585360efdb28f731070a50_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000164404708\/cba974d2aa585360efdb28f731070a50_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/621188704\/1372774425","profile_link_color":"0099CC","profile_sidebar_border_color":"FFF8AD","profile_sidebar_fill_color":"F6FFD1","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Thu Aug 08 22:09:15 +0000 2013","id":365595587111948288,"id_str":"3655
 95587111948288","text":"De botellon con los amigos de @AsocJuvAlhucema http:\/\/t.co\/wM8NkOU2XS","source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1528891176,"id_str":"1528891176","name":"Jose Manuel Moreno ","screen_name":"pataxula24","location":"","url":null,"description":null,"protected":false,"followers_count":82,"friends_count":186,"listed_count":0,"created_at":"Tue Jun 18 21:38:54 +0000 2013","favourites_count":3,"utc_offset":null,"time_zone":null,"geo_enabled":false,"verified":false,"statuses_count":35,"lang":"es","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"
 https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000014584943\/642f71a8c4e644d228e244938eecaf67_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000014584943\/642f71a8c4e644d228e244938eecaf67_normal.jpeg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":5,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"AsocJuvAlhucema","name":"Asoc. Juv. Alhucema","id":537670153,"id_str":"537670153","indices":[30,46]}],"media":[{"id":365595587116142593,"id_str":"365595587116142593","indices":[47,69],"media_url":"http:\/\
 /pbs.twimg.com\/media\/BRLbP92CEAE05_q.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/BRLbP92CEAE05_q.jpg","url":"http:\/\/t.co\/wM8NkOU2XS","display_url":"pic.twitter.com\/wM8NkOU2XS","expanded_url":"http:\/\/twitter.com\/pataxula24\/status\/365595587111948288\/photo\/1","type":"photo","sizes":{"large":{"w":1024,"h":576,"resize":"fit"},"small":{"w":340,"h":191,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"medium":{"w":600,"h":338,"resize":"fit"}}}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"es"},"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"pataxula24","name":"Jose Manuel Moreno ","id":1528891176,"id_str":"1528891176","indices":[3,14]},{"screen_name":"AsocJuvAlhucema","name":"Asoc. Juv. Alhucema","id":537670153,"id_str":"537670153","indices":[46,62]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"es"}
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217609428993,"id_str":"365611217609428993","text":"Finally I saw her again, she had disapeared","source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":911075358,"id_str":"911075358","name":"J&G","screen_name":"_joanna_xoxo","location":"North Carolina","url":null,"description":"Prince Royce \u2764 \/ In love \u221e\/ IG:_joannaa_xo r\u03bfyc\u03b5\u03b7\u03b1\u03c4\u03b9c\u03b1 \/ ~PlanetRoyce~","protected":false,"followers_count":767,"friends_count":705,"listed_count":2,"created_at":"Sun Oct 28 20:47:17 +0000 2012","favourites_count":109,"utc_offset":null,"time_zone":null,"geo_enabled":true,"verified":false,"statuses_count":6730,"lang":"en","contributors_enabled":false,"is_trans
 lator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000240499579\/a5d659535b107fa23ad0f38100fbabcf_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000240499579\/a5d659535b107fa23ad0f38100fbabcf_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/911075358\/1375664446","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"
 hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"en"}
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217584259072,"id_str":"365611217584259072","text":"@Laurenszuhaj @MalwinaJozwiak ur rude","source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":365611022876291072,"in_reply_to_status_id_str":"365611022876291072","in_reply_to_user_id":1038074576,"in_reply_to_user_id_str":"1038074576","in_reply_to_screen_name":"Laurenszuhaj","user":{"id":213052827,"id_str":"213052827","name":"Someone, Somewhere","screen_name":"Heather_Skye_","location":"Scotland","url":null,"description":"Lord Of The Rings,  that is all.","protected":false,"followers_count":1065,"friends_count":920,"listed_count":0,"created_at":"Sun Nov 07 20:50:00 +0000 2010","favourites_count":1529,"utc_offset":7200,"time_zone":"Amsterdam","geo_enabled":false,"verified":false,"statuses_count":8035,"lang":"en","contributors_enabled":false,"is_translator":false,"prof
 ile_background_color":"131516","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme14\/bg.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme14\/bg.gif","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000225351955\/4d10a3af1109ce9603a240ca39554a07_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000225351955\/4d10a3af1109ce9603a240ca39554a07_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/213052827\/1372875958","profile_link_color":"009999","profile_sidebar_border_color":"EEEEEE","profile_sidebar_fill_color":"EFEFEF","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"ur
 ls":[],"user_mentions":[{"screen_name":"Laurenszuhaj","name":"Satan ","id":1038074576,"id_str":"1038074576","indices":[0,13]},{"screen_name":"MalwinaJozwiak","name":"malwina","id":393390356,"id_str":"393390356","indices":[14,29]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"et"}
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217617821697,"id_str":"365611217617821697","text":"@TThassio vai cola na expo nego?","source":"web","truncated":false,"in_reply_to_status_id":365611087766360065,"in_reply_to_status_id_str":"365611087766360065","in_reply_to_user_id":335097974,"in_reply_to_user_id_str":"335097974","in_reply_to_screen_name":"TThassio","user":{"id":227374028,"id_str":"227374028","name":"mary jane ","screen_name":"mariferreiraevc","location":"Cruzeiro ","url":null,"description":"http:\/\/instagram.com\/mariferreiraevc","protected":false,"followers_count":344,"friends_count":149,"listed_count":0,"created_at":"Thu Dec 16 17:38:16 +0000 2010","favourites_count":239,"utc_offset":-10800,"time_zone":"Brasilia","geo_enabled":true,"verified":false,"statuses_count":16443,"lang":"pt","contributors_enabled":false,"is_translator":false,"profile_background_color":"F50A31","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/3788000
 00037995191\/c4155ad156ccb2d8e0fce974d05cc52b.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000037995191\/c4155ad156ccb2d8e0fce974d05cc52b.gif","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000184110001\/c63a8b97dbe8aa4fb1faacb7a38d8cef_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000184110001\/c63a8b97dbe8aa4fb1faacb7a38d8cef_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/227374028\/1374704344","profile_link_color":"990DF7","profile_sidebar_border_color":"000000","profile_sidebar_fill_color":"EFEFEF","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_men
 tions":[{"screen_name":"TThassio","name":"Thassio Carvalho","id":335097974,"id_str":"335097974","indices":[0,9]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"pt"}
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217584259073,"id_str":"365611217584259073","text":"@LawerChacal eso es tongo jajaja","source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":365609713238409217,"in_reply_to_status_id_str":"365609713238409217","in_reply_to_user_id":287447203,"in_reply_to_user_id_str":"287447203","in_reply_to_screen_name":"LawerChacal","user":{"id":479736037,"id_str":"479736037","name":"Andrea Iba\u00f1ez ","screen_name":"andreiita_007","location":"Madrid","url":null,"description":"Como bien ves el tiempo nos va poniendo aprueba vuelo con el balance nuevo de mis bambas nuevas..","protected":false,"followers_count":121,"friends_count":127,"listed_count":1,"created_at":"Tue Jan 31 18:18:25 +0000 2012","favourites_count":128,"utc_offset":null,"time_zone":null,"geo_enabled":true,"verified":false,"statuses_count":2125,"lang":"es","contribut
 ors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000155420889\/e562b048fd5d444e50a0ab5f2bb68de8_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000155420889\/e562b048fd5d444e50a0ab5f2bb68de8_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/479736037\/1369922681","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"re
 tweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"LawerChacal","name":"Lawer Chacal Clik","id":287447203,"id_str":"287447203","indices":[0,12]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"es"}
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217609437185,"id_str":"365611217609437185","text":"RT @MOHAMAD019: \u0645\u0646 \u0645\u062d\u0627\u0633\u0646 \u062a\u0648\u064a\u062a\u0631 :\n\n\u0644\u0627 \u064a\u0643\u0634\u0641 \u0639\u062f\u062f \u0632\u064a\u0627\u0631\u062a\u0646\u0627 \u0644\u0640 \u062d\u0633\u0627\u0628 \u0645\u0646 \u0646\u064f\u062d\u0650\u0628\u0652 !!","source":"\u003ca href=\"http:\/\/twitter.com\/#!\/download\/ipad\" rel=\"nofollow\"\u003eTwitter for iPad\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":100830573,"id_str":"100830573","name":"\u0627\u062c\u0645\u0644 \u0627\u0644\u062a\u063a\u0631\u064a\u062f\u0627\u062a","screen_name":"Don_mohamad","location":"","url":null,"description":"\u062d\u0633\u0627\u0628 \u0644\u0639\u0645\u0644 \u0631\u064a\u062a\u0648\u064a\u062a \u0644\u0644\u062a\u
 063a\u0631\u064a\u062f\u0627\u062a \u0627\u0644\u062c\u0645\u064a\u0644\u0647 \u0648\u0627\u0644\u0645\u0641\u064a\u062f\u0647 ..","protected":false,"followers_count":4586,"friends_count":3078,"listed_count":6,"created_at":"Thu Dec 31 19:33:11 +0000 2009","favourites_count":18,"utc_offset":10800,"time_zone":"Baghdad","geo_enabled":false,"verified":false,"statuses_count":1122,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/3354092145\/381917afca5618db40ae9775026c5aa5_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/3354092145\/381917afca5618db40ae9775026c5aa5_normal.png","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/
 100830573\/1362764536","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Thu Aug 08 23:01:36 +0000 2013","id":365608761974456322,"id_str":"365608761974456322","text":"\u0645\u0646 \u0645\u062d\u0627\u0633\u0646 \u062a\u0648\u064a\u062a\u0631 :\n\n\u0644\u0627 \u064a\u0643\u0634\u0641 \u0639\u062f\u062f \u0632\u064a\u0627\u0631\u062a\u0646\u0627 \u0644\u0640 \u062d\u0633\u0627\u0628 \u0645\u0646 \u0646\u064f\u062d\u0650\u0628\u0652 !!","source":"\u003ca href=\"http:\/\/twitter.com\/#!\/download\/ipad\" rel=\"nofollow\"\u003eTwitter for iPad\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_us
 er_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":258417961,"id_str":"258417961","name":"\u0645\u062d\u0645\u062f \u0627\u0644\u062d\u062c\u0631\u0641\u24c2","screen_name":"MOHAMAD019","location":"Kuwait.","url":null,"description":"\u0623\u0645\u0646\u064a\u062a\u064a \u0627\u0644\u0648\u062d\u064a\u062f\u0647 \u0627\u0646 \u0627\u0644\u0632\u0645\u0646 \u064a\u0631\u062c\u0639 \u0644\u0644\u0648\u0631\u0627\u0621 \u0644\u062a\u0635\u062d\u064a\u062d \u0645\u0627\u0636\u064a \u062d\u064a\u0627\u062a\u064a \u0641\u0642\u0637.","protected":false,"followers_count":7252,"friends_count":119,"listed_count":6,"created_at":"Sun Feb 27 17:47:43 +0000 2011","favourites_count":6,"utc_offset":-18000,"time_zone":"Quito","geo_enabled":true,"verified":false,"statuses_count":6411,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png"
 ,"profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000094014461\/ce3a53da33bc85767bbda77cff9d7274_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000094014461\/ce3a53da33bc85767bbda77cff9d7274_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/258417961\/1357347455","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":3,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"lang":"ar"},"retweet_count":0,"entities":{"hashtags":[]
 ,"urls":[],"user_mentions":[{"screen_name":"MOHAMAD019","name":"\u0645\u062d\u0645\u062f \u0627\u0644\u062d\u062c\u0631\u0641\u24c2","id":258417961,"id_str":"258417961","indices":[3,14]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"ar"}
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217592651776,"id_str":"365611217592651776","text":"What are you looking at bucko? http:\/\/t.co\/lz8bvmt7He","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":502235296,"id_str":"502235296","name":"Ryan","screen_name":"r_eady22","location":"","url":null,"description":"Best player in the valley.","protected":false,"followers_count":259,"friends_count":133,"listed_count":0,"created_at":"Fri Feb 24 23:17:31 +0000 2012","favourites_count":46,"utc_offset":-10800,"time_zone":"Atlantic Time (Canada)","geo_enabled":false,"verified":false,"statuses_count":522,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"B2DFDA","profile_background_image_ur
 l":"http:\/\/a0.twimg.com\/images\/themes\/theme13\/bg.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme13\/bg.gif","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/344513261574670499\/a81f2fa625fe26b4800df8b05052557e_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/344513261574670499\/a81f2fa625fe26b4800df8b05052557e_normal.jpeg","profile_link_color":"93A644","profile_sidebar_border_color":"EEEEEE","profile_sidebar_fill_color":"FFFFFF","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[],"media":[{"id":365611217596846081,"id_str":"365611217596846081","indices":[31,53],"media_url":"http:\/\/pbs.twimg.com\/
 media\/BRLpdx7CEAEk7pn.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/BRLpdx7CEAEk7pn.jpg","url":"http:\/\/t.co\/lz8bvmt7He","display_url":"pic.twitter.com\/lz8bvmt7He","expanded_url":"http:\/\/twitter.com\/r_eady22\/status\/365611217592651776\/photo\/1","type":"photo","sizes":{"medium":{"w":600,"h":451,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":340,"h":255,"resize":"fit"},"large":{"w":1024,"h":769,"resize":"fit"}}}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"filter_level":"medium","lang":"en"}
-{"created_at":"Thu Aug 08 23:11:21 +0000 2013","id":365611217596866560,"id_str":"365611217596866560","text":"Audit\u00f3rio do Terceiro Encontro de Casais - Ig. Brasil Para Cristo - Ipatinga -MG. Ministra\u00e7\u00e3o @silmarcoelho http:\/\/t.co\/iIdxA70yVH","source":"\u003ca href=\"http:\/\/www.apple.com\" rel=\"nofollow\"\u003ePhotos on iOS\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":79531723,"id_str":"79531723","name":"Pastor Moreti","screen_name":"pr_moreti","location":"Rio de Janeiro - Brasil","url":"http:\/\/www.pastormoreti.com.br","description":"Um pregador formado nas adversidades, que aprendeu a depender de Deus e ser tolerante. Que procura ouvir e incentivar as pessoas a encontrarem a felicidade.","protected":false,"followers_count":287,"friends_count":87,"listed_count":1,"created_at":"Sat Oct 03 18:21:12 +0000 2009","fa
 vourites_count":2,"utc_offset":-10800,"time_zone":"Brasilia","geo_enabled":true,"verified":false,"statuses_count":5339,"lang":"pt","contributors_enabled":false,"is_translator":false,"profile_background_color":"EBEBEB","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/77104388\/Por_do_sol_twetter.jpg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/77104388\/Por_do_sol_twetter.jpg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2491736810\/n2jypj34wzwmwjtvzmjj_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2491736810\/n2jypj34wzwmwjtvzmjj_normal.png","profile_link_color":"990000","profile_sidebar_border_color":"DFDFDF","profile_sidebar_fill_color":"F3F3F3","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":nu
 ll},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"silmarcoelho","name":"Silmar Coelho","id":69507933,"id_str":"69507933","indices":[94,107]}],"media":[{"id":365611217605255168,"id_str":"365611217605255168","indices":[108,130],"media_url":"http:\/\/pbs.twimg.com\/media\/BRLpdx9CYAABwRc.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/BRLpdx9CYAABwRc.jpg","url":"http:\/\/t.co\/iIdxA70yVH","display_url":"pic.twitter.com\/iIdxA70yVH","expanded_url":"http:\/\/twitter.com\/pr_moreti\/status\/365611217596866560\/photo\/1","type":"photo","sizes":{"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":960,"h":720,"resize":"fit"},"medium":{"w":600,"h":450,"resize":"fit"},"small":{"w":340,"h":255,"resize":"fit"}}}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"filter_level":"medium","lang":"pt"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221778964480,"id_str":"365611221778964480","text":"Chick rides big cock with anal #anal  #porn #freeporn http:\/\/t.co\/VPQcScbM08","source":"\u003ca href=\"http:\/\/hunthot.com\" rel=\"nofollow\"\u003eHunthot.com\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1423843104,"id_str":"1423843104","name":"hunthot.com","screen_name":"hunthotCom","location":"","url":"http:\/\/hunthot.com","description":"JUST hunt&hot!!!","protected":false,"followers_count":30,"friends_count":157,"listed_count":0,"created_at":"Sun May 12 19:24:43 +0000 2013","favourites_count":1,"utc_offset":10800,"time_zone":"Athens","geo_enabled":false,"verified":false,"statuses_count":5819,"lang":"pl","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url
 ":"http:\/\/a0.twimg.com\/profile_background_images\/378800000006967014\/865cc6ee04901d404265ab7bb7f589ff.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000006967014\/865cc6ee04901d404265ab7bb7f589ff.jpeg","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000012731225\/5e070bb34665fed33731f32dd159b8aa_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000012731225\/5e070bb34665fed33731f32dd159b8aa_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1423843104\/1371589496","profile_link_color":"0084B4","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null
 ,"retweet_count":0,"entities":{"hashtags":[{"text":"anal","indices":[31,36]},{"text":"porn","indices":[38,43]},{"text":"freeporn","indices":[44,53]}],"urls":[{"url":"http:\/\/t.co\/VPQcScbM08","expanded_url":"http:\/\/tinyurl.com\/kaxqgdj","display_url":"tinyurl.com\/kaxqgdj","indices":[54,76]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":true,"filter_level":"medium","lang":"en"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221786959873,"id_str":"365611221786959873","text":"You can't let black folks hold nun","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":248815262,"id_str":"248815262","name":"_TAKEOFF\u270c\u2122","screen_name":"A1_NIGGA_4LIFE","location":"#Inyobitch","url":null,"description":null,"protected":false,"followers_count":592,"friends_count":822,"listed_count":0,"created_at":"Mon Feb 07 19:49:34 +0000 2011","favourites_count":76,"utc_offset":-10800,"time_zone":"Atlantic Time (Canada)","geo_enabled":true,"verified":false,"statuses_count":13463,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"131516","profile_background_image_url":"http:\/\/
 a0.twimg.com\/profile_background_images\/317517400\/imagesCAGKAI60.jpg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/317517400\/imagesCAGKAI60.jpg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000210506845\/978c83b500ae19c080d8949493ff5be7_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000210506845\/978c83b500ae19c080d8949493ff5be7_normal.jpeg","profile_link_color":"009999","profile_sidebar_border_color":"EEEEEE","profile_sidebar_fill_color":"EFEFEF","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"en"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221778567171,"id_str":"365611221778567171","text":"reryssy atiradora de elite, estou no ch\u00e3o","source":"web","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":94933646,"id_str":"94933646","name":"musa do proletariado","screen_name":"luaishot","location":"","url":"http:\/\/instagram.com\/luaishot","description":"yv\u00e2nava lua, psicod\u00e9lica, 666, recife, gostosa.","protected":false,"followers_count":392,"friends_count":195,"listed_count":28,"created_at":"Sun Dec 06 04:28:14 +0000 2009","favourites_count":332,"utc_offset":-10800,"time_zone":"Brasilia","geo_enabled":false,"verified":false,"statuses_count":28669,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"0D0D0D","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\
 /378800000012941896\/c81658b1431fe728f56023e4ac182136.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000012941896\/c81658b1431fe728f56023e4ac182136.jpeg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000166519943\/e8cb602a3949a5e909a43e6038676636_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000166519943\/e8cb602a3949a5e909a43e6038676636_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/94933646\/1361819020","profile_link_color":"FF8419","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"FFFFFF","profile_text_color":"14CCBD","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],
 "user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"pt"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221786963968,"id_str":"365611221786963968","text":"\u0645\u062c\u0646\u0648\u0646 \u0634\u0627\u0641\u0643 \u0648\u0627\u0635\u0628\u062d \u0627\u0644\u064a\u0648\u0645 \u0639\u0627\u0642\u0644 \u0648\u0639\u0627\u0642\u0644 \u062a\u0631\u0649 \u0641\u064a \u063a\u064a\u0628\u062a\u0643 \u0635\u0627\u0631 \u0645\u062c\u0646\u0648\u0646","source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1635968832,"id_str":"1635968832","name":"7hmooody1403","screen_name":"ALbdnawi","location":"","url":null,"description":null,"protected":false,"followers_count":134,"friends_count":243,"listed_count":0,"created_at":"Wed Jul 31 17:34:58 +0000 2013","favourites_count":0,"utc_offset":null,"time_z
 one":null,"geo_enabled":false,"verified":false,"statuses_count":57,"lang":"ar","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000249211322\/94c78177455ed0da0e827beaf6d98377_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000249211322\/94c78177455ed0da0e827beaf6d98377_normal.png","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1635968832\/1375775515","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,
 "notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"ar"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221786951680,"id_str":"365611221786951680","text":"Bir cevabin varmi?","source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1052395614,"id_str":"1052395614","name":"EL\u0130ZAAAAA","screen_name":"bayankediiii","location":"MERS\u0130N","url":"https:\/\/www.facebook.com\/ezgi.sozer.35","description":"D\u00fcn tarih oldu yar\u0131n ise bilmece bug\u00fcn sana hediye.Numaram\u0131 de\u011fi\u015ftirmedim hala 1 numaray\u0131m.                                           MessegaMe Pin; GC 219 XVK","protected":false,"followers_count":258,"friends_count":138,"listed_count":0,"created_at":"Tue Jan 01 11:33:06 +0000 2013","favourites_count":1379,"utc_offset":10800,"time_zone":"Baghdad","
 geo_enabled":true,"verified":false,"statuses_count":10509,"lang":"tr","contributors_enabled":false,"is_translator":false,"profile_background_color":"0099B9","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/378800000044904409\/ffe5c52551e6041e82d4ce38e4fe501e.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000044904409\/ffe5c52551e6041e82d4ce38e4fe501e.jpeg","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000244683336\/9de76a27030012d941391af33643c4f5_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000244683336\/9de76a27030012d941391af33643c4f5_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1052395614\/1375702160","profile_link_color":"0099B9","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"95E8EC","profile_text_color":"3C3940","profile_use_background_image":f
 alse,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"tr"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221786959874,"id_str":"365611221786959874","text":"\u0639\u0637\u0646\u064a \u0639\u0644\u064a \u0628\u0639\u0636 \u0627\u0644\u062a\u063a\u0627\u0631\u064a\u062f \u0631\u062a\u0648\u064a\u062a\n        \u0639\u0634\u0627\u0646 \u0627\u062d\u0633\u0646 \u0627\u0646\u0643 \u0645\u0639\u064a \u0627\u0645\u062a\u0648\u0644\u0639\n\n\u0644\u0627 \u062a\u0628\u062e\u0644 \u0627\u0644\u0631\u062a\u0648\u064a\u062a \u0627\u0646 \u0643\u0627\u0646 \u0645\u0627\u062c\u064a\u062a\n         \u0643\u0644 \u0627\u0644\u0639\u0631\u0628 \u062a\u0642\u0631\u0628 \u0628\u0639\u0636 \u0648\u0627\u062a\u062f\u0644\u0639 #\u0631\u062a\u0648\u064a\u062a","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"use
 r":{"id":301315504,"id_str":"301315504","name":"\u0627\u0644\u0640\u0632\u0651\u064a\u0640A\u0142_\u017e\u00e9\u00e8\u00f1\u0640\u0640\u0646\u0652","screen_name":"al_zeen","location":"","url":null,"description":"\u0645\u064f\u0647\u0631\u0629 \u0648 \u062a\u0644\u0639\u0628 \u0641\u064a \u062d\u0634\u0649 \u0643\u0644 \u062e\u064a\u0627\u0644 .. \u0639\u0634\u0627\u0642\u0647\u0627 \u0648\u0627\u062c\u062f \u060c \u0648 \u0644\u0627 \u0623\u062d\u062f\u0646 \u0641\u062a\u0646\u0647\u0627! ((\u0627\u0644\u062e\u0627\u0635 \u0645\u063a\u0644\u0642 \u0644\u0623\u0634\u0639\u0627\u0631\u064d \u0622\u062e\u0631  ))","protected":false,"followers_count":3890,"friends_count":2299,"listed_count":2,"created_at":"Thu May 19 08:06:27 +0000 2011","favourites_count":209,"utc_offset":null,"time_zone":null,"geo_enabled":true,"verified":false,"statuses_count":22655,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:
 \/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000231849915\/ccfdd1bf555b9743edbc787c05f36ec7_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000231849915\/ccfdd1bf555b9743edbc787c05f36ec7_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/301315504\/1375477404","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[{"text":"\u0631\u062a\u0648\u064a\u062a","indices":[125,131]}],"urls":[],"u
 ser_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"ar"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221803741184,"id_str":"365611221803741184","text":"Or that random ass swing set in the middle of fucking nowhere","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":310805318,"id_str":"310805318","name":"\u00a9hloe","screen_name":"ofmiceandchl0","location":"Newcastle","url":null,"description":"I like a lot of bands, tattoos, coffee and Harry Potter\u270c","protected":false,"followers_count":287,"friends_count":546,"listed_count":16,"created_at":"Sat Jun 04 11:24:58 +0000 2011","favourites_count":22,"utc_offset":3600,"time_zone":"London","geo_enabled":true,"verified":false,"statuses_count":23485,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_
 color":"DBE9ED","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/378800000046755551\/1a05f787be98030e9316e3a431b0e474.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000046755551\/1a05f787be98030e9316e3a431b0e474.png","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000260950646\/be325bf148e5da31d6d610f2f457d17f_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000260950646\/be325bf148e5da31d6d610f2f457d17f_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/310805318\/1375622640","profile_link_color":"000000","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"7AC3EE","profile_text_color":"3D1957","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinat
 es":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"en"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221782761472,"id_str":"365611221782761472","text":"\u3010\u5b9a\u671f\u3011\u8150\u5973\u5b50\u3067\u3059\uff01\u30de\u30ae\/\u9ed2\u30d0\u30b9\/\u30d8\u30bf\u30ea\u30a2\/\u5fa9\u6d3b\/\u305d\u306e\u4ed6\u8af8\u3005\u3002\u6c17\u8efd\u306b\u7d61\u3093\u3067\u304f\u308c\u308b\u3068\u559c\u3076\u3088\u3001\u5fc3\u306e\u4e2d\u3067\u3002\u30b3\u30df\u30e5\u969c\u306fTwitter\u3067\u3082\u6cbb\u3089\u306a\u3044(\u00b4\uff1b\u03c9\uff1b`)\u3067\u3082\u9003\u3052\u3061\u3083\u30c0\u30e1\u3060\u9003\u3052\u3061\u3083\u30c0\u30e1\u3060\u3002\u30d5\u30a9\u30ed\u30fc\u30df\u30fc\u306a\u306e\u3060\u3088\u3002\u30aa\u30ca\u30b7\u30e3\u30b9\uff01","source":"\u003ca href=\"http:\/\/twittbot.net\/\" rel=\"nofollow\"\u003etwittbot.net\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":870011654,"id_
 str":"870011654","name":"\u305f\u304b\u3089@\u3084\u308b\u6c17\u30b9\u30a4\u30c3\u30c1OFF","screen_name":"rose_mottoyare","location":"\u3042\u306a\u305f\u306e\u5fc3\u306e\u306a\u304b\u306b...","url":null,"description":"\u30cb\u30b8\u30f2\u30bf\/\u250c(\u250c ^o^)\u2510\uff1c\u7981\u65ad\u306e\u30a8\u30c7\u30f3\/\u9ad8\u7dd1\/\u30a2\u30ea\u30d0\u30d0\u541b\u3092\u8ab0\u304b\u62b1\u3044\u3066\/\u53f3\u30d0\u30d0\/\u6211\u304c\u7956\u56fd\u306e\u70ba\u306a\u3089\u6b7b\u306d\u308b\/27\u304f\u3093\u306f\u6c38\u9060\/\u30a8\u30f4\u30a1\/\u304f\u3045\u3045\u3045rrrr\u3053\u3063\u3061\u3043\u3043\u30a4\u30a8\u30a2\/\u3068\u304b\u3044\u3063\u3066\u57fa\u672c\u96d1\u98df\/\u30ea\u30d6\u30a1\u30a4\u5175\u9577\u306b\u8abf\u6559\u3055\u308c\u968a\/\u30b3\u30df\u30e5\u969c\/\uff0a\u4e16\u754c\u306f\u611b\u3067\u6ea2\u308c\u3066\u308b\uff0a","protected":false,"followers_count":23,"friends_count":61,"listed_count":1,"created_at":"Tue Oct 09 14:43:34 +0000 2012","favourites_count":13,"utc_offset":nu
 ll,"time_zone":null,"geo_enabled":false,"verified":false,"statuses_count":790,"lang":"ja","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/344513261573852781\/4b1c56493712b5a8a893be858ada06d3_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/344513261573852781\/4b1c56493712b5a8a893be858ada06d3_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/870011654\/1366091993","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request
 _sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"ja"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221795344384,"id_str":"365611221795344384","text":"Dari tadi malam sakit perut :'","source":"\u003ca href=\"http:\/\/www.snaptwit.com\" rel=\"nofollow\"\u003eSnaptwit\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":990234434,"id_str":"990234434","name":"Restu yuriana","screen_name":"Restuyuriana","location":"D U R I, riau indonesia ","url":null,"description":"Mama papa (\u007b\u007d) (\u02c6\u25bd\u02c6) :) @smp3mandau IX.8 (\u02c6\u25bd\u02c6)","protected":false,"followers_count":407,"friends_count":438,"listed_count":0,"created_at":"Wed Dec 05 05:10:58 +0000 2012","favourites_count":15,"utc_offset":null,"time_zone":null,"geo_enabled":false,"verified":false,"statuses_count":4580,"lang":"id","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","
 profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000259182393\/58c5db71d24791610b6cdc98366e043d_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000259182393\/58c5db71d24791610b6cdc98366e043d_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/990234434\/1371303995","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favori
 ted":false,"retweeted":false,"filter_level":"medium","lang":"id"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221795340288,"id_str":"365611221795340288","text":"la tomaron por loca en la aldea por comerse las piedras. Cuando todo qued\u00f3 arrasado x el hurancan ella segu\u00eda all\u00ed, sonriendo. BN :)","source":"\u003ca href=\"http:\/\/sinproject.net\/tweecha\/\" rel=\"nofollow\"\u003etweecha sinProject\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":602985599,"id_str":"602985599","name":"coral rico sanchez","screen_name":"Coralrs","location":"","url":null,"description":null,"protected":false,"followers_count":66,"friends_count":90,"listed_count":0,"created_at":"Fri Jun 08 19:01:48 +0000 2012","favourites_count":6,"utc_offset":null,"time_zone":null,"geo_enabled":false,"verified":false,"statuses_count":389,"lang":"es","contributors_enabled":false,"is_translator":false,"profile_back
 ground_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2600380263\/38Pcg56I_normal","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2600380263\/38Pcg56I_normal","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/602985599\/1359592759","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"mediu
 m","lang":"es"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221791145985,"id_str":"365611221791145985","text":"Gave you all. I had And you tossed it in the trash. You tossed it in the trash, you did.","source":"web","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1259574804,"id_str":"1259574804","name":"sulljin\u2022","screen_name":"fxsjin","location":"","url":null,"description":"thanks for everything.","protected":false,"followers_count":2467,"friends_count":2269,"listed_count":1,"created_at":"Mon Mar 11 14:26:02 +0000 2013","favourites_count":435,"utc_offset":25200,"time_zone":"Bangkok","geo_enabled":false,"verified":false,"statuses_count":20785,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/378800000040542161\/052d1045
 8da26d72c909134aebeef035.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000040542161\/052d10458da26d72c909134aebeef035.jpeg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000246903183\/2c939e1cf5dd3fe895d614b80010655a_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000246903183\/2c939e1cf5dd3fe895d614b80010655a_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1259574804\/1375843497","profile_link_color":"A38B4B","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favori
 ted":false,"retweeted":false,"filter_level":"medium","lang":"en"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221782773761,"id_str":"365611221782773761","text":"RT @boronology: \u30b2\u30fc\u30e0\u6a5f\u3092\u5076\u7136\u8e0f\u3093\u3060\u304b\u306e\u3088\u3046\u306b\u88c5\u3063\u3066\u58ca\u305d\u3046\u3068\u3059\u308b\u89aa\u3092\u30b2\u30fc\u30e0\u30ad\u30e5\u30fc\u30d6\u3067\u6bb4\u308a\u7d9a\u3051\u308b\u3068\u6b7b\u306c\u3002\u3061\u306a\u307f\u306b\u305d\u308c\u3067\u3082\u30b2\u30fc\u30e0\u30ad\u30e5\u30fc\u30d6\u306f\u58ca\u308c\u306a\u3044","source":"\u003ca href=\"http:\/\/tapbots.com\/tweetbot\" rel=\"nofollow\"\u003eTweetbot for iOS\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":83123433,"id_str":"83123433","name":"\u79cb\u6708\u785d\u5b50 \uff20PSO2 Ship10","screen_name":"Lily_vitroiris","location":"\u5ddd\u8d8a","url":null,"description":"FtX\u3082\u3069\u304d\u3002\u30d0
 \u30a4\u30bb\u30af\u30b7\u30e5\u30a2\u30eb\u3002\u5973\u5b50\u529b\uff1f\u4f55\u305d\u308c\u7f8e\u5473\u3057\u3044\u306e\uff1f\nAS\u7684\u601d\u8003\u306a\u5de5\u5b66\u5f92\u3002\u30a2\u30ca\u30ed\u30b0\u56de\u8def\u5c02\u653b\u3002\u97f3\u30b2\u30fc\u3001\u81ea\u4f5cPC\u3001\u96fb\u5b50\u5de5\u4f5c\u3001LTspice\u3002\nPSO2 : Ship10\u30ca\u30a6\u30b7\u30ba  Hu50\/Te45\/Fo30\/Br25","protected":false,"followers_count":2560,"friends_count":740,"listed_count":253,"created_at":"Sat Oct 17 12:40:33 +0000 2009","favourites_count":45256,"utc_offset":32400,"time_zone":"Tokyo","geo_enabled":true,"verified":false,"statuses_count":212147,"lang":"ja","contributors_enabled":false,"is_translator":false,"profile_background_color":"FF6699","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/193009032\/tomoneko_1920x1200_ul.jpg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/193009032\/tomoneko_1920x1200_ul.jpg","profile_backgro
 und_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000092721711\/ce5e736cf7da52f32314138475fe6350_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000092721711\/ce5e736cf7da52f32314138475fe6350_normal.png","profile_link_color":"B40B43","profile_sidebar_border_color":"CC3366","profile_sidebar_fill_color":"E5507E","profile_text_color":"362720","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Thu Aug 08 23:10:50 +0000 2013","id":365611087523090433,"id_str":"365611087523090433","text":"\u30b2\u30fc\u30e0\u6a5f\u3092\u5076\u7136\u8e0f\u3093\u3060\u304b\u306e\u3088\u3046\u306b\u88c5\u3063\u3066\u58ca\u305d\u3046\u3068\u3059\u308b\u89aa\u3092\u30b2\u30fc\u30e0\u30ad\u30e5\u30fc\u30d6\u3067\u6bb4\u308a\u7d9a\u3051\u308b\u30
 68\u6b7b\u306c\u3002\u3061\u306a\u307f\u306b\u305d\u308c\u3067\u3082\u30b2\u30fc\u30e0\u30ad\u30e5\u30fc\u30d6\u306f\u58ca\u308c\u306a\u3044","source":"\u003ca href=\"http:\/\/mikutter.hachune.net\/\" rel=\"nofollow\"\u003emikutter\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":344723014,"id_str":"344723014","name":"Amazon\u30c6\u30ed\u3067\u4e3b\u98df\u304c\u7d20\u9eba\u306b","screen_name":"boronology","location":"Skype\uff1aboronji65536","url":"http:\/\/boronology.blogspot.jp\/","description":"\u307c\u308d\u3093\u3058\u30fb\u30b6\u30fb\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3067\u304d\u306a\u3044\u30d5\u30ea\u30fc\u30bf\u30fc\u66f8\u5e97\u54e1\u30028\u6708\u672b\u3067\u66f8\u5e97\u54e1\u306f\u8f9e\u3081\u3066\u5225\u306e\u4ed5\u4e8b\u3055\u304c\u3059\u4e88\u5b9a\u3002\r\nAmazon Wish list \u2192 http:\/\/t.co\/FcWyD4HsbF\r\nGitHu
 b\u2192 https:\/\/t.co\/3oxIQhKmDq\r\nTumblr\u2192http:\/\/t.co\/IKOMkeDI9a","protected":false,"followers_count":2055,"friends_count":983,"listed_count":216,"created_at":"Fri Jul 29 13:58:13 +0000 2011","favourites_count":20982,"utc_offset":32400,"time_zone":"Tokyo","geo_enabled":false,"verified":false,"statuses_count":83736,"lang":"ja","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2701105097\/40323e6ba14ebd774c42ea10950d57d3_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2701105097\/40323e6ba14ebd774c42ea10950d57d3_normal.png","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profil
 e_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":2,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"lang":"ja"},"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"boronology","name":"Amazon\u30c6\u30ed\u3067\u4e3b\u98df\u304c\u7d20\u9eba\u306b","id":344723014,"id_str":"344723014","indices":[3,14]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"ja"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221816324097,"id_str":"365611221816324097","text":"I hope the best for you &amp; the decisions you make.","source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1559261942,"id_str":"1559261942","name":"Kiari Murphy","screen_name":"Kiari_20","location":"","url":null,"description":null,"protected":false,"followers_count":27,"friends_count":90,"listed_count":0,"created_at":"Mon Jul 01 00:36:58 +0000 2013","favourites_count":56,"utc_offset":null,"time_zone":null,"geo_enabled":false,"verified":false,"statuses_count":360,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/them
 es\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000212830817\/7b44df886c599a087896653bbb93fdcf_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000212830817\/7b44df886c599a087896653bbb93fdcf_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1559261942\/1375894162","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"en"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221816324096,"id_str":"365611221816324096","text":"@Shade_Sheist Ima be in L.A. next week, let's link up!?","source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":17513897,"in_reply_to_user_id_str":"17513897","in_reply_to_screen_name":"Shade_Sheist","user":{"id":970444670,"id_str":"970444670","name":"The Chosen Juan","screen_name":"JuanGHOMIE","location":"714 to the 316","url":null,"description":"Ambitions of wealthier better life, real thoughts from a #RealMind #iFly #Investor #Traveling #MusicCritic #ApperalCritic #DeepThinking'sWhatIDo #iRepCali. #714","protected":false,"followers_count":175,"friends_count":219,"listed_count":1,"created_at":"Sun Nov 25 17:35:30 +0000 2012","favourites_count":1582,"utc_offset":null,"time_zone":null,"geo_enabled":false,"ve
 rified":false,"statuses_count":4602,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000069803763\/c7c887b2d8232b38d681041899e26f61_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000069803763\/c7c887b2d8232b38d681041899e26f61_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/970444670\/1357875753","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":nu
 ll,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"Shade_Sheist","name":"Shade Sheist\u2122","id":17513897,"id_str":"17513897","indices":[0,13]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"en"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221795348480,"id_str":"365611221795348480","text":"\u65e5\u304c\u51fa\u3066\u304d\u305f","source":"\u003ca href=\"http:\/\/fairchildblog.img.jugem.jp\/20130626_678745.jpg\" rel=\"nofollow\"\u003eRUNXtter\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1337397708,"id_str":"1337397708","name":"\u3042\u3093\u305a","screen_name":"anzunyaa","location":"\u3048\u308d\u306b\u3083\u3093\u306e\u5ac1","url":null,"description":"\u3042\u3093\u305a\u306b\u3083\u3042\u3002KONAMI\u306e\u97f3\u30b2\u30fc\u306f\u3060\u3044\u305f\u3044\u3084\u308a\u307e\u3059\uff08\u96d1\u98df\u7cfb\uff09 \u898f\u5236\u57a2\u2192@anzumit W\u898f\u5236\u2192@anzumitu \u3046\u308b\u3055\u3044\u306e\u3067\u30d5\u30a9\u30ed\u30fc\u3059\u308b\u3068\u304d\u306f\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044","protected
 ":false,"followers_count":431,"friends_count":332,"listed_count":46,"created_at":"Mon Apr 08 19:24:16 +0000 2013","favourites_count":55859,"utc_offset":32400,"time_zone":"Tokyo","geo_enabled":false,"verified":false,"statuses_count":48166,"lang":"ja","contributors_enabled":false,"is_translator":false,"profile_background_color":"B2DFDA","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme13\/bg.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme13\/bg.gif","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000219181195\/6f058d9d850dea87628dd57bad3d195b_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000219181195\/6f058d9d850dea87628dd57bad3d195b_normal.png","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1337397708\/1365696869","profile_link_color":"93A644","profile_sidebar_border_color":"EEEEEE","profile_sidebar_fill_color"
 :"FFFFFF","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"ja"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221778567168,"id_str":"365611221778567168","text":"Jd kpn kita kumpul?ayu raya ke3 plg supen\"@Jessica_Rosadi: Minal 'aidin walfaidzin  @DinaSAndriani @ReskykaAyu @fellaaleste @langka_pipi\"","source":"\u003ca href=\"http:\/\/blackberry.com\/twitter\" rel=\"nofollow\"\u003eTwitter for BlackBerry\u00ae\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":174960683,"id_str":"174960683","name":"Sundari","screen_name":"sunDin_Ak","location":"Sei Penuh - Jambi - Indonesia","url":"http:\/\/twitter.com\/sunDin_Ak","description":"NTSDLL | Mathematic's Education STAIN Kerinci","protected":false,"followers_count":849,"friends_count":402,"listed_count":1,"created_at":"Thu Aug 05 07:30:29 +0000 2010","favourites_count":31,"utc_offset":-25200,"time_zone":"Pacific Time (US & Canada)","geo_enabled"
 :true,"verified":false,"statuses_count":16104,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"642D8B","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/680251280\/72b158a456f42ca9b90e1fae26f1f270.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/680251280\/72b158a456f42ca9b90e1fae26f1f270.jpeg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000241494915\/f35d6c9668b3e5840328af7ebddf8aa5_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000241494915\/f35d6c9668b3e5840328af7ebddf8aa5_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/174960683\/1375124803","profile_link_color":"FF0000","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"7AC3EE","profile_text_color":"3D1957","profile_use_background_image":true,"default_profile":false,"def
 ault_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"Jessica_Rosadi","name":"Jessica R Frastica","id":1589995980,"id_str":"1589995980","indices":[42,57]},{"screen_name":"DinaSAndriani","name":"DINASeptiaANDRIANI\u2122","id":469063606,"id_str":"469063606","indices":[84,98]},{"screen_name":"ReskykaAyu","name":"Ayu Reskyka Putri.A","id":176002217,"id_str":"176002217","indices":[99,110]},{"screen_name":"fellaaleste","name":"Fella Lestesia Vina","id":426371858,"id_str":"426371858","indices":[111,123]},{"screen_name":"langka_pipi","name":"Nopiii","id":237711892,"id_str":"237711892","indices":[124,136]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"id"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221807927296,"id_str":"365611221807927296","text":"\"@Cris9Cristina: Qu\u00e9 mejor s\u00e1bana que t\u00fa.\"","source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":507874573,"id_str":"507874573","name":"irie","screen_name":"crisloppez","location":"ROAD TO ZION","url":"http:\/\/ask.fm\/crisloppez","description":"Simpatizante de la cultura Rastafari. Comunista marxista y libertaria. Roja. \u00bfPerroflauta...? Idealista. Futura fil\u00f3sofa, espero querido Wert.","protected":false,"followers_count":697,"friends_count":401,"listed_count":2,"created_at":"Tue Feb 28 20:26:07 +0000 2012","favourites_count":4397,"utc_offset":7200,"time_zone":"Amsterdam","geo_enabled":false,"verifie
 d":false,"statuses_count":36137,"lang":"es","contributors_enabled":false,"is_translator":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/378800000007503857\/83c027e09d3e0ae8fccbb798e2639cef.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000007503857\/83c027e09d3e0ae8fccbb798e2639cef.jpeg","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000076919968\/90c808fd91eaa10de8621c02a94449af_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000076919968\/90c808fd91eaa10de8621c02a94449af_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/507874573\/1375563877","profile_link_color":"FF0303","profile_sidebar_border_color":"000000","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false
 ,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"Cris9Cristina","name":"Cris\u2020ina","id":556048253,"id_str":"556048253","indices":[1,15]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"es"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221816328193,"id_str":"365611221816328193","text":"as soon as I heard Bless The Broken Road I said to Em that it was Rascal Flatts, I just love them","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":269883839,"id_str":"269883839","name":"gabs","screen_name":"gablaaajb","location":"","url":"http:\/\/lif3-happens.tumblr.com","description":"Better to be hated, than loved for what you're not.","protected":false,"followers_count":324,"friends_count":286,"listed_count":0,"created_at":"Mon Mar 21 16:35:25 +0000 2011","favourites_count":31,"utc_offset":3600,"time_zone":"London","geo_enabled":false,"verified":false,"statuses_count":18631,"lang":"en","contributors_enabled":false,"is_t
 ranslator":false,"profile_background_color":"E9F4CA","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/378800000046676765\/f1128e06812c1e5f51eba325ea8c14cf.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000046676765\/f1128e06812c1e5f51eba325ea8c14cf.jpeg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000261056508\/9b4643ebea60e453d7d671e99785aea6_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000261056508\/9b4643ebea60e453d7d671e99785aea6_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/269883839\/1375899834","profile_link_color":"4FA3DB","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"BBBE9F","profile_text_color":"89B59C","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"not
 ifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"en"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221782765569,"id_str":"365611221782765569","text":"RT @_sofiamendes: @PsiuLums_ vai \u00f4 obesa! JSOSJSOSJS","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":444013607,"id_str":"444013607","name":"Pequena \u270c","screen_name":"PsiuLums_","location":"Far Far Way","url":null,"description":"S\u00f3 \u00e9 feliz quem sabe o que quer \u270c SPFC \u2764\u2764","protected":false,"followers_count":191,"friends_count":150,"listed_count":0,"created_at":"Thu Dec 22 20:00:23 +0000 2011","favourites_count":300,"utc_offset":-25200,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":6880,"lang":"pt","contributors_enabled":false,"is_translator":fa
 lse,"profile_background_color":"FFFFFF","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/378800000039745529\/1abdcd3bca01cc07b7c73d98e3a4c0d9.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000039745529\/1abdcd3bca01cc07b7c73d98e3a4c0d9.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000261788598\/cfb52bec2ee5d566724254e021315a17_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000261788598\/cfb52bec2ee5d566724254e021315a17_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/444013607\/1376001838","profile_link_color":"FF0A0A","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":nu
 ll},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Thu Aug 08 23:11:11 +0000 2013","id":365611173443420160,"id_str":"365611173443420160","text":"@PsiuLums_ vai \u00f4 obesa! JSOSJSOSJS","source":"web","truncated":false,"in_reply_to_status_id":365610062439391232,"in_reply_to_status_id_str":"365610062439391232","in_reply_to_user_id":444013607,"in_reply_to_user_id_str":"444013607","in_reply_to_screen_name":"PsiuLums_","user":{"id":545216922,"id_str":"545216922","name":"Am\u00f4  \u2661","screen_name":"_sofiamendes","location":"Brasil","url":null,"description":"Pisciana, 13 anos. Melhor amiga \u2665 Uma hist\u00f3ria escrita pelo dedo de Deus \u266b Eu te quero s\u00f3 pra mim, como as ondas s\u00e3o do mar! Eu te amo @_MatheusSantan2 \u2661","protected":false,"followers_count":384,"friends_count":556,"listed_count":0,"created_at":"Wed Apr 04 13:37:50 +0000 2012","favourites_count":16,"utc_offset":-10800,"time_zone":"Brasilia","geo_enabl
 ed":true,"verified":false,"statuses_count":10755,"lang":"pt","contributors_enabled":false,"is_translator":false,"profile_background_color":"141717","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/378800000047454825\/9805ec0b9ceda7a955748968b451ac74.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000047454825\/9805ec0b9ceda7a955748968b451ac74.jpeg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000227394306\/649308b1e0d7b6df426ece37edc32c74_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000227394306\/649308b1e0d7b6df426ece37edc32c74_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/545216922\/1375880288","profile_link_color":"9005FA","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"7AC3EE","profile_text_color":"3D1957","profile_use_background_image":true,"defaul
 t_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":{"id":"68e019afec7d0ba5","url":"https:\/\/api.twitter.com\/1.1\/geo\/id\/68e019afec7d0ba5.json","place_type":"city","name":"S\u00e3o Paulo","full_name":"S\u00e3o Paulo, S\u00e3o Paulo","country_code":"BR","country":"Brasil","bounding_box":{"type":"Polygon","coordinates":[[[-46.826038999999994,-24.008813999999997],[-46.826038999999994,-23.356792],[-46.365052,-23.356792],[-46.365052,-24.008813999999997]]]},"attributes":{}},"contributors":null,"retweet_count":1,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"PsiuLums_","name":"Pequena \u270c","id":444013607,"id_str":"444013607","indices":[0,10]}]},"favorited":false,"retweeted":false,"lang":"pt"},"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"_sofiamendes","name":"Am\u00f4  \u2661","id":545216922,"id_str":"545216922","indices":[
 3,16]},{"screen_name":"PsiuLums_","name":"Pequena \u270c","id":444013607,"id_str":"444013607","indices":[18,28]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"pt"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221778575360,"id_str":"365611221778575360","text":"tren #mtvhottest One Direction","source":"\u003ca href=\"http:\/\/www.samsungmobile.com\" rel=\"nofollow\"\u003eSamsung Mobile\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1428232459,"id_str":"1428232459","name":"MyNaughtyBoyIsZayn","screen_name":"267Patrick","location":"","url":null,"description":"#Directioner #UltrAslan\r\nJustinBieber-BridgitMendler-AustinMahone-SelenaGomez-DemiLovato-MileyCyrus-AvrilLavigne","protected":false,"followers_count":1094,"friends_count":1088,"listed_count":0,"created_at":"Tue May 14 16:08:26 +0000 2013","favourites_count":598,"utc_offset":null,"time_zone":null,"geo_enabled":false,"verified":false,"statuses_count":3923,"lang":"tr","contributors_enabled":false,"is_translator":false,"profile_backg
 round_color":"FFFFFF","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/378800000035308608\/32404e043b870772d337a6af11d2e884.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/378800000035308608\/32404e043b870772d337a6af11d2e884.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/378800000209161178\/d5145c0e25d051a67c326596f3df76a1_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/378800000209161178\/d5145c0e25d051a67c326596f3df76a1_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1428232459\/1375114663","profile_link_color":"AB2CEB","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"c
 oordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[{"text":"mtvhottest","indices":[5,16]}],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"fr"}
-{"created_at":"Thu Aug 08 23:11:22 +0000 2013","id":365611221786959872,"id_str":"365611221786959872","text":"\u7dca\u6025\u5730\u9707\u901f\u5831\u3067\u300cYahoo! JAPAN\u300d\u306b\u30a2\u30af\u30bb\u30b9\u6025\u5897--3.11\u3092\u8d85\u3048\u308b\u9ad8\u8ca0\u8377 http:\/\/t.co\/6fpDDD74uz @cnet_japan\u3055\u3093\u304b

<TRUNCATED>

[3/5] kudu git commit: twitter-demo: remove module

Posted by to...@apache.org.
twitter-demo: remove module

We haven't used this in any meaningful way in a long time.

Change-Id: I244c123c30b36c8e890364057100191dc1c3090c
Reviewed-on: http://gerrit.cloudera.org:8080/8302
Tested-by: Kudu Jenkins
Reviewed-by: Todd Lipcon <to...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/42ed9bd7
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/42ed9bd7
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/42ed9bd7

Branch: refs/heads/master
Commit: 42ed9bd7e4d72d752ad9e06fda171231710a79ad
Parents: aa7d6a9
Author: Adar Dembo <ad...@cloudera.com>
Authored: Tue Oct 17 12:45:01 2017 -0700
Committer: Todd Lipcon <to...@apache.org>
Committed: Wed Oct 18 19:22:37 2017 +0000

----------------------------------------------------------------------
 CMakeLists.txt                              |   1 -
 build-support/dist_test.py                  |   9 -
 build-support/release/rat_exclude_files.txt |   2 -
 src/kudu/benchmarks/ycsb-schema.h           |  50 ---
 src/kudu/tools/CMakeLists.txt               |   8 -
 src/kudu/tools/create-demo-table.cc         | 127 ------
 src/kudu/twitter-demo/CMakeLists.txt        |  75 ----
 src/kudu/twitter-demo/README                |  24 --
 src/kudu/twitter-demo/example-deletes.txt   | 163 --------
 src/kudu/twitter-demo/example-tweets.txt    | 505 -----------------------
 src/kudu/twitter-demo/ingest_firehose.cc    | 122 ------
 src/kudu/twitter-demo/insert_consumer.cc    | 119 ------
 src/kudu/twitter-demo/insert_consumer.h     |  65 ---
 src/kudu/twitter-demo/oauth-test.cc         |  65 ---
 src/kudu/twitter-demo/oauth.cc              | 128 ------
 src/kudu/twitter-demo/oauth.h               |  68 ---
 src/kudu/twitter-demo/parser-test.cc        |  91 ----
 src/kudu/twitter-demo/parser.cc             | 103 -----
 src/kudu/twitter-demo/parser.h              |  86 ----
 src/kudu/twitter-demo/twitter-schema.h      |  84 ----
 src/kudu/twitter-demo/twitter_streamer.cc   | 206 ---------
 src/kudu/twitter-demo/twitter_streamer.h    |  68 ---
 22 files changed, 2169 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8bc2d15..7e1350c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1206,5 +1206,4 @@ add_subdirectory(src/kudu/server)
 add_subdirectory(src/kudu/tablet)
 add_subdirectory(src/kudu/tools)
 add_subdirectory(src/kudu/tserver)
-add_subdirectory(src/kudu/twitter-demo)
 add_subdirectory(src/kudu/util)

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/build-support/dist_test.py
----------------------------------------------------------------------
diff --git a/build-support/dist_test.py b/build-support/dist_test.py
index 328d2b8..28e4e01 100755
--- a/build-support/dist_test.py
+++ b/build-support/dist_test.py
@@ -70,12 +70,6 @@ DEPS_FOR_ALL = \
      "build/latest/bin/kudu-tserver",
      "build/latest/bin/kudu-master",
 
-     # parser-test requires these data files.
-     # TODO: again, we should do this with some per-test metadata file.
-     # TODO: these are broken now that we separate source and build trees.
-     #".../example-deletes.txt",
-     #".../example-tweets.txt",
-
      # Tests that require tooling require this.
      "build/latest/bin/kudu",
      ]
@@ -148,10 +142,7 @@ def get_test_commandlines():
 
 
 def is_lib_blacklisted(lib):
-  # These particular system libraries, we should ship to the remote nodes.
   # No need to ship things like libc, libstdcxx, etc.
-  if "oauth" in lib:
-    return False
   if lib.startswith("/lib") or lib.startswith("/usr"):
     return True
   return False

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/build-support/release/rat_exclude_files.txt
----------------------------------------------------------------------
diff --git a/build-support/release/rat_exclude_files.txt b/build-support/release/rat_exclude_files.txt
index 36d98ff..19f12ae 100644
--- a/build-support/release/rat_exclude_files.txt
+++ b/build-support/release/rat_exclude_files.txt
@@ -144,8 +144,6 @@ src/kudu/gutil/utf/utf.h
 src/kudu/gutil/utf/utfdef.h
 src/kudu/security/x509_check_host.cc
 src/kudu/security/x509_check_host.h
-src/kudu/twitter-demo/example-deletes.txt
-src/kudu/twitter-demo/example-tweets.txt
 src/kudu/util/cache.h
 src/kudu/util/coding.cc
 src/kudu/util/cache-test.cc

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/benchmarks/ycsb-schema.h
----------------------------------------------------------------------
diff --git a/src/kudu/benchmarks/ycsb-schema.h b/src/kudu/benchmarks/ycsb-schema.h
deleted file mode 100644
index 5a5386a..0000000
--- a/src/kudu/benchmarks/ycsb-schema.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-//
-// Inline function to create the YCSB schema
-#ifndef KUDU_BENCHMARKS_YCSB_SCHEMA_H
-#define KUDU_BENCHMARKS_YCSB_SCHEMA_H
-
-#include "kudu/client/schema.h"
-
-namespace kudu {
-
-static const client::KuduColumnSchema::DataType kString =
-    client::KuduColumnSchema::STRING;
-
-inline client::KuduSchema CreateYCSBSchema() {
-  client::KuduSchema s;
-  client::KuduSchemaBuilder b;
-
-  b.AddColumn("key")->Type(kString)->NotNull()->PrimaryKey();
-  b.AddColumn("field0")->Type(kString)->NotNull();
-  b.AddColumn("field1")->Type(kString)->NotNull();
-  b.AddColumn("field2")->Type(kString)->NotNull();
-  b.AddColumn("field3")->Type(kString)->NotNull();
-  b.AddColumn("field4")->Type(kString)->NotNull();
-  b.AddColumn("field5")->Type(kString)->NotNull();
-  b.AddColumn("field6")->Type(kString)->NotNull();
-  b.AddColumn("field7")->Type(kString)->NotNull();
-  b.AddColumn("field8")->Type(kString)->NotNull();
-  b.AddColumn("field9")->Type(kString)->NotNull();
-  CHECK_OK(b.Build(&s));
-  return s;
-}
-
-} // namespace kudu
-#endif
-

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/tools/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/src/kudu/tools/CMakeLists.txt b/src/kudu/tools/CMakeLists.txt
index bcfc9c2..8bd29c9 100644
--- a/src/kudu/tools/CMakeLists.txt
+++ b/src/kudu/tools/CMakeLists.txt
@@ -62,14 +62,6 @@ target_link_libraries(kudu_tools_util
   ${LINK_LIBS})
 
 #######################################
-# create-demo-table
-#######################################
-
-add_executable(create-demo-table create-demo-table.cc)
-target_link_libraries(create-demo-table
-  ${LINK_LIBS})
-
-#######################################
 # ksck
 #######################################
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/tools/create-demo-table.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tools/create-demo-table.cc b/src/kudu/tools/create-demo-table.cc
deleted file mode 100644
index 43a9619..0000000
--- a/src/kudu/tools/create-demo-table.cc
+++ /dev/null
@@ -1,127 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you 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.
-//
-// Simple tool to send an CREATE TABLE request for one of the demo tablets.
-// This will eventually be replaced by a proper shell -- just a quick
-// hack for easy demo purposes.
-
-#include <iostream>
-#include <string>
-#include <vector>
-
-#include <gflags/gflags.h>
-#include <glog/logging.h>
-
-#include "kudu/benchmarks/tpch/tpch-schemas.h"
-#include "kudu/benchmarks/ycsb-schema.h"
-#include "kudu/client/client.h"
-#include "kudu/client/schema.h"
-#include "kudu/client/shared_ptr.h"
-#include "kudu/gutil/gscoped_ptr.h"
-#include "kudu/gutil/strings/split.h"
-#include "kudu/twitter-demo/twitter-schema.h"
-#include "kudu/util/env.h"
-#include "kudu/util/faststring.h"
-#include "kudu/util/flags.h"
-#include "kudu/util/logging.h"
-#include "kudu/util/status.h"
-
-using kudu::client::KuduClient;
-using kudu::client::KuduClientBuilder;
-using kudu::client::KuduSchema;
-using kudu::client::KuduTableCreator;
-using kudu::client::sp::shared_ptr;
-using std::string;
-using std::vector;
-
-DEFINE_string(master_address, "localhost",
-              "Comma separated list of master addresses to run against.");
-DEFINE_int32(num_replicas, 3,
-             "Replication count for the created table.");
-
-static const char* const kTwitterTabletId = "twitter";
-static const char* const kTPCH1TabletId = "tpch1";
-static const char* const kYCSBTabletId = "ycsb";
-
-namespace kudu {
-
-void PrintUsage(char** argv) {
-  std::cerr << "usage: " << argv[0] << " "
-            << kTwitterTabletId << "|"
-            << kTPCH1TabletId << "|"
-            << kYCSBTabletId
-            << std::endl;
-}
-
-string LoadFile(const string& path) {
-  faststring buf;
-  CHECK_OK(ReadFileToString(Env::Default(), path, &buf));
-  return buf.ToString();
-}
-
-// TODO: refactor this and the associated constants into some sort of
-// demo-tables.h class in a src/demos/ directory.
-Status GetDemoSchema(const string& table_name, KuduSchema* schema) {
-  if (table_name == kTwitterTabletId) {
-    *schema = twitter_demo::CreateTwitterSchema();
-  } else if (table_name == kTPCH1TabletId) {
-    *schema = tpch::CreateLineItemSchema();
-  } else if (table_name == kYCSBTabletId) {
-    *schema = kudu::CreateYCSBSchema();
-  } else {
-    return Status::InvalidArgument("Invalid demo table name", table_name);
-  }
-  return Status::OK();
-}
-
-static int CreateDemoTable(int argc, char** argv) {
-  ParseCommandLineFlags(&argc, &argv, true);
-  if (argc != 2) {
-    PrintUsage(argv);
-    return 1;
-  }
-  InitGoogleLoggingSafe(argv[0]);
-  FLAGS_logtostderr = true;
-
-  string table_name = argv[1];
-
-  vector<string> addrs = strings::Split(FLAGS_master_address, ",");
-  CHECK(!addrs.empty()) << "At least one master address must be specified!";
-
-  KuduSchema schema;
-  CHECK_OK(GetDemoSchema(table_name, &schema));
-
-  // Set up client.
-  shared_ptr<KuduClient> client;
-  CHECK_OK(KuduClientBuilder()
-           .master_server_addrs(addrs)
-           .Build(&client));
-
-  gscoped_ptr<KuduTableCreator> table_creator(client->NewTableCreator());
-  CHECK_OK(table_creator->table_name(table_name)
-           .schema(&schema)
-           .set_range_partition_columns({})
-           .num_replicas(FLAGS_num_replicas)
-           .Create());
-  return 0;
-}
-
-} // namespace kudu
-
-int main(int argc, char** argv) {
-  return kudu::CreateDemoTable(argc, argv);
-}

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/CMakeLists.txt b/src/kudu/twitter-demo/CMakeLists.txt
deleted file mode 100644
index ebdc5e5..0000000
--- a/src/kudu/twitter-demo/CMakeLists.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# Everything in this module depends on test infrastructure.
-if (NO_TESTS)
-  return()
-endif()
-
-# Use pkgconfig to configure the build regarding liboauth. This allows
-# to extract info on include and library paths, etc. The liboauth library
-# is installed at alternative location on MacOS X.
-find_package(PkgConfig)
-if (NOT PKG_CONFIG_FOUND)
-  message(WARNING "pkgconfig not found. Skipping twitter demo.")
-else()
-  pkg_search_module(LIBOAUTH oauth)
-  if(NOT LIBOAUTH_FOUND)
-    message(WARNING "liboauth not found. Skipping twitter demo.")
-  else()
-    include_directories(SYSTEM ${LIBOAUTH_INCLUDE_DIRS})
-    link_directories(${LIBOAUTH_LIBRARY_DIRS})
-    add_library(twitter_demo
-      oauth.cc
-      parser.cc
-      insert_consumer.cc
-      twitter_streamer.cc)
-
-    target_link_libraries(twitter_demo
-      gutil
-      kudu_util
-      kudu_test_util)
-
-    target_link_libraries(twitter_demo
-      kudu_client
-      ${LIBOAUTH_LIBRARIES}
-      ${CURL_LIBRARIES}
-      ${KUDU_BASE_LIBS})
-
-    # Require that the tserver protobuf code is generated first
-    add_dependencies(twitter_demo
-      tserver_proto)
-
-    add_executable(ingest_firehose ingest_firehose.cc)
-    target_link_libraries(ingest_firehose
-      twitter_demo)
-
-    # Tests
-    ADD_KUDU_TEST(oauth-test)
-    # parser-test relies on symlinked data files which we can't currently copy correctly
-    # to the cluster.
-    ADD_KUDU_TEST(parser-test LABELS no_dist_test)
-    target_link_libraries(oauth-test
-      twitter_demo)
-    target_link_libraries(parser-test
-      twitter_demo)
-    execute_process(COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/example-tweets.txt
-      ${EXECUTABLE_OUTPUT_PATH})
-    execute_process(COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/example-deletes.txt
-      ${EXECUTABLE_OUTPUT_PATH})
-  endif() # if(NOT LIBOAUTH_LIBRARY) ... else ...
-endif() # if (NOT PKG_CONFIG_FOUND) ... else ...

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/README
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/README b/src/kudu/twitter-demo/README
deleted file mode 100644
index 9d54c6e..0000000
--- a/src/kudu/twitter-demo/README
+++ /dev/null
@@ -1,24 +0,0 @@
-
-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.
-
-This directory contains a demo which ingests the Twitter firehose
-into Kudu.
-
-Building this requires some dependencies which are not in our thirdparty/
-directory:
-  Ubuntu: apt-get -y install liboauth-dev libcurl-dev
-  RHEL6: yum -y install liboauth-devel curl-devel
-
-By default, the demo uses the KuduProject twitter account's API keys
-to connect to the sample firehose. Use the available command-line
-flags to use a different account.

http://git-wip-us.apache.org/repos/asf/kudu/blob/42ed9bd7/src/kudu/twitter-demo/example-deletes.txt
----------------------------------------------------------------------
diff --git a/src/kudu/twitter-demo/example-deletes.txt b/src/kudu/twitter-demo/example-deletes.txt
deleted file mode 100644
index 640f187..0000000
--- a/src/kudu/twitter-demo/example-deletes.txt
+++ /dev/null
@@ -1,163 +0,0 @@
-{"delete":{"status":{"id":267057648111853568,"user_id":606114977,"id_str":"267057648111853568","user_id_str":"606114977"}}}
-{"delete":{"status":{"id":365610819137970176,"user_id":1491343880,"id_str":"365610819137970176","user_id_str":"1491343880"}}}
-{"delete":{"status":{"id":365600266294272002,"user_id":1655650302,"id_str":"365600266294272002","user_id_str":"1655650302"}}}
-{"delete":{"status":{"id":272060894937235456,"user_id":294010962,"id_str":"272060894937235456","user_id_str":"294010962"}}}
-{"delete":{"status":{"id":267023015743733761,"user_id":316010929,"id_str":"267023015743733761","user_id_str":"316010929"}}}
-{"delete":{"status":{"id":365511472878596097,"user_id":370760011,"id_str":"365511472878596097","user_id_str":"370760011"}}}
-{"delete":{"status":{"id":365399585625083904,"user_id":1274118158,"id_str":"365399585625083904","user_id_str":"1274118158"}}}
-{"delete":{"status":{"id":365612903728021504,"user_id":381239891,"id_str":"365612903728021504","user_id_str":"381239891"}}}
-{"delete":{"status":{"id":361066433372884995,"user_id":118787650,"id_str":"361066433372884995","user_id_str":"118787650"}}}
-{"delete":{"status":{"id":364961268244819968,"user_id":1212003986,"id_str":"364961268244819968","user_id_str":"1212003986"}}}
-{"delete":{"status":{"id":365422641676419072,"user_id":1449650708,"id_str":"365422641676419072","user_id_str":"1449650708"}}}
-{"delete":{"status":{"id":361473696109568001,"user_id":750382290,"id_str":"361473696109568001","user_id_str":"750382290"}}}
-{"delete":{"status":{"id":354267604992528387,"user_id":560763818,"id_str":"354267604992528387","user_id_str":"560763818"}}}
-{"delete":{"status":{"id":234395352986447874,"user_id":584161811,"id_str":"234395352986447874","user_id_str":"584161811"}}}
-{"delete":{"status":{"id":307906499051671553,"user_id":1131831090,"id_str":"307906499051671553","user_id_str":"1131831090"}}}
-{"delete":{"status":{"id":361679875481927681,"user_id":702099402,"id_str":"361679875481927681","user_id_str":"702099402"}}}
-{"delete":{"status":{"id":234370497515765760,"user_id":584161811,"id_str":"234370497515765760","user_id_str":"584161811"}}}
-{"delete":{"status":{"id":364278599152443392,"user_id":45978919,"id_str":"364278599152443392","user_id_str":"45978919"}}}
-{"delete":{"status":{"id":343144877028147202,"user_id":471589368,"id_str":"343144877028147202","user_id_str":"471589368"}}}
-{"delete":{"status":{"id":334010391749332993,"user_id":471589368,"id_str":"334010391749332993","user_id_str":"471589368"}}}
-{"delete":{"status":{"id":365611838345457664,"user_id":363033026,"id_str":"365611838345457664","user_id_str":"363033026"}}}
-{"delete":{"status":{"id":365612907897176065,"user_id":1122270540,"id_str":"365612907897176065","user_id_str":"1122270540"}}}
-{"delete":{"status":{"id":265755727782621184,"user_id":117731627,"id_str":"265755727782621184","user_id_str":"117731627"}}}
-{"delete":{"status":{"id":310588303491620866,"user_id":471589368,"id_str":"310588303491620866","user_id_str":"471589368"}}}
-{"delete":{"status":{"id":310012329079230465,"user_id":471589368,"id_str":"310012329079230465","user_id_str":"471589368"}}}
-{"delete":{"status":{"id":352916745490673664,"user_id":1287517861,"id_str":"352916745490673664","user_id_str":"1287517861"}}}
-{"delete":{"status":{"id":234360674489352193,"user_id":584161811,"id_str":"234360674489352193","user_id_str":"584161811"}}}
-{"delete":{"status":{"id":313055527305359360,"user_id":402465302,"id_str":"313055527305359360","user_id_str":"402465302"}}}
-{"delete":{"status":{"id":267181916946579456,"user_id":606114977,"id_str":"267181916946579456","user_id_str":"606114977"}}}
-{"delete":{"status":{"id":85303805117349889,"user_id":261218323,"id_str":"85303805117349889","user_id_str":"261218323"}}}
-{"delete":{"status":{"id":84382282953146368,"user_id":261218323,"id_str":"84382282953146368","user_id_str":"261218323"}}}
-{"delete":{"status":{"id":308412227277430784,"user_id":471589368,"id_str":"308412227277430784","user_id_str":"471589368"}}}
-{"delete":{"status":{"id":365607040078450688,"user_id":1650893678,"id_str":"365607040078450688","user_id_str":"1650893678"}}}
-{"delete":{"status":{"id":365608864592691200,"user_id":1116595795,"id_str":"365608864592691200","user_id_str":"1116595795"}}}
-{"delete":{"status":{"id":365560307155869696,"user_id":970784143,"id_str":"365560307155869696","user_id_str":"970784143"}}}
-{"delete":{"status":{"id":343060730876149760,"user_id":995216024,"id_str":"343060730876149760","user_id_str":"995216024"}}}
-{"delete":{"status":{"id":365612912104046592,"user_id":363303529,"id_str":"365612912104046592","user_id_str":"363303529"}}}
-{"delete":{"status":{"id":365352911376621568,"user_id":23126868,"id_str":"365352911376621568","user_id_str":"23126868"}}}
-{"delete":{"status":{"id":365612433957588992,"user_id":445619455,"id_str":"365612433957588992","user_id_str":"445619455"}}}
-{"delete":{"status":{"id":365576128041201666,"user_id":187011137,"id_str":"365576128041201666","user_id_str":"187011137"}}}
-{"delete":{"status":{"id":364881962344792064,"user_id":389703571,"id_str":"364881962344792064","user_id_str":"389703571"}}}
-{"delete":{"status":{"id":234300540736118784,"user_id":584161811,"id_str":"234300540736118784","user_id_str":"584161811"}}}
-{"delete":{"status":{"id":258368467898605568,"user_id":199020443,"id_str":"258368467898605568","user_id_str":"199020443"}}}
-{"delete":{"status":{"id":363778331935649792,"user_id":597343507,"id_str":"363778331935649792","user_id_str":"597343507"}}}
-{"delete":{"status":{"id":365608025739886592,"user_id":630746058,"id_str":"365608025739886592","user_id_str":"630746058"}}}
-{"delete":{"status":{"id":314896608691101697,"user_id":294466600,"id_str":"314896608691101697","user_id_str":"294466600"}}}
-{"delete":{"status":{"id":355389484864503810,"user_id":1495601640,"id_str":"355389484864503810","user_id_str":"1495601640"}}}
-{"delete":{"status":{"id":338626156192481282,"user_id":1143664200,"id_str":"338626156192481282","user_id_str":"1143664200"}}}
-{"delete":{"status":{"id":302552201568604160,"user_id":555211712,"id_str":"302552201568604160","user_id_str":"555211712"}}}
-{"delete":{"status":{"id":365609359515987969,"user_id":86393029,"id_str":"365609359515987969","user_id_str":"86393029"}}}
-{"delete":{"status":{"id":307013628203237377,"user_id":346960220,"id_str":"307013628203237377","user_id_str":"346960220"}}}
-{"delete":{"status":{"id":365612928860291072,"user_id":882516884,"id_str":"365612928860291072","user_id_str":"882516884"}}}
-{"delete":{"status":{"id":300877814440275968,"user_id":555211712,"id_str":"300877814440275968","user_id_str":"555211712"}}}
-{"delete":{"status":{"id":190221450777604096,"user_id":274804222,"id_str":"190221450777604096","user_id_str":"274804222"}}}
-{"delete":{"status":{"id":78450173965115392,"user_id":261218323,"id_str":"78450173965115392","user_id_str":"261218323"}}}
-{"delete":{"status":{"id":211993210422181891,"user_id":245030912,"id_str":"211993210422181891","user_id_str":"245030912"}}}
-{"delete":{"status":{"id":360183674962051073,"user_id":1360590798,"id_str":"360183674962051073","user_id_str":"1360590798"}}}
-{"delete":{"status":{"id":245174718452338688,"user_id":777174108,"id_str":"245174718452338688","user_id_str":"777174108"}}}
-{"delete":{"status":{"id":299251351429476352,"user_id":555211712,"id_str":"299251351429476352","user_id_str":"555211712"}}}
-{"delete":{"status":{"id":190148453106585603,"user_id":274804222,"id_str":"190148453106585603","user_id_str":"274804222"}}}
-{"delete":{"status":{"id":188852253778644996,"user_id":44686062,"id_str":"188852253778644996","user_id_str":"44686062"}}}
-{"delete":{"status":{"id":234076464235020290,"user_id":584161811,"id_str":"234076464235020290","user_id_str":"584161811"}}}
-{"delete":{"status":{"id":234072672601010178,"user_id":584161811,"id_str":"234072672601010178","user_id_str":"584161811"}}}
-{"delete":{"status":{"id":365609753809928192,"user_id":368521768,"id_str":"365609753809928192","user_id_str":"368521768"}}}
-{"delete":{"status":{"id":365083746124300288,"user_id":1212003986,"id_str":"365083746124300288","user_id_str":"1212003986"}}}
-{"delete":{"status":{"id":205046444737040385,"user_id":393230991,"id_str":"205046444737040385","user_id_str":"393230991"}}}
-{"delete":{"status":{"id":255834902757507073,"user_id":199020443,"id_str":"255834902757507073","user_id_str":"199020443"}}}
-{"delete":{"status":{"id":365609753772171264,"user_id":348682214,"id_str":"365609753772171264","user_id_str":"348682214"}}}
-{"delete":{"status":{"id":234060467167965184,"user_id":584161811,"id_str":"234060467167965184","user_id_str":"584161811"}}}
-{"delete":{"status":{"id":365609816699318273,"user_id":433471019,"id_str":"365609816699318273","user_id_str":"433471019"}}}
-{"delete":{"status":{"id":234055022973964288,"user_id":584161811,"id_str":"234055022973964288","user_id_str":"584161811"}}}
-{"delete":{"status":{"id":365612920492662785,"user_id":340870559,"id_str":"365612920492662785","user_id_str":"340870559"}}}
-{"delete":{"status":{"id":306632571524087808,"user_id":346960220,"id_str":"306632571524087808","user_id_str":"346960220"}}}
-{"delete":{"status":{"id":365606624829771776,"user_id":100525053,"id_str":"365606624829771776","user_id_str":"100525053"}}}
-{"delete":{"status":{"id":365612513632591872,"user_id":807637609,"id_str":"365612513632591872","user_id_str":"807637609"}}}
-{"delete":{"status":{"id":306443022533529600,"user_id":346960220,"id_str":"306443022533529600","user_id_str":"346960220"}}}
-{"delete":{"status":{"id":210524453241765888,"user_id":245030912,"id_str":"210524453241765888","user_id_str":"245030912"}}}
-{"delete":{"status":{"id":210384103424536576,"user_id":245030912,"id_str":"210384103424536576","user_id_str":"245030912"}}}
-{"delete":{"status":{"id":321354784064016384,"user_id":221576287,"id_str":"321354784064016384","user_id_str":"221576287"}}}
-{"delete":{"status":{"id":365612815618281473,"user_id":1209234702,"id_str":"365612815618281473","user_id_str":"1209234702"}}}
-{"delete":{"status":{"id":321342712848719872,"user_id":221576287,"id_str":"321342712848719872","user_id_str":"221576287"}}}
-{"delete":{"status":{"id":365612765303422978,"user_id":333604624,"id_str":"365612765303422978","user_id_str":"333604624"}}}
-{"delete":{"status":{"id":365506699739672576,"user_id":140727979,"id_str":"365506699739672576","user_id_str":"140727979"}}}
-{"delete":{"status":{"id":306409069634265088,"user_id":1131831090,"id_str":"306409069634265088","user_id_str":"1131831090"}}}
-{"delete":{"status":{"id":365493336699707395,"user_id":1542349333,"id_str":"365493336699707395","user_id_str":"1542349333"}}}
-{"delete":{"status":{"id":157494588507045888,"user_id":402465302,"id_str":"157494588507045888","user_id_str":"402465302"}}}
-{"delete":{"status":{"id":189845511098994690,"user_id":274804222,"id_str":"189845511098994690","user_id_str":"274804222"}}}
-{"delete":{"status":{"id":365608201917431808,"user_id":338597198,"id_str":"365608201917431808","user_id_str":"338597198"}}}
-{"delete":{"status":{"id":301451423269416962,"user_id":1027610744,"id_str":"301451423269416962","user_id_str":"1027610744"}}}
-{"delete":{"status":{"id":365606561906835457,"user_id":169962619,"id_str":"365606561906835457","user_id_str":"169962619"}}}
-{"delete":{"status":{"id":345667956405071872,"user_id":26394490,"id_str":"345667956405071872","user_id_str":"26394490"}}}
-{"delete":{"status":{"id":298208144146956289,"user_id":555211712,"id_str":"298208144146956289","user_id_str":"555211712"}}}
-{"delete":{"status":{"id":177410414739587072,"user_id":395393883,"id_str":"177410414739587072","user_id_str":"395393883"}}}
-{"delete":{"status":{"id":298180965065433088,"user_id":555211712,"id_str":"298180965065433088","user_id_str":"555211712"}}}
-{"delete":{"status":{"id":365612878541234176,"user_id":39330283,"id_str":"365612878541234176","user_id_str":"39330283"}}}
-{"delete":{"status":{"id":364204355747971072,"user_id":206718088,"id_str":"364204355747971072","user_id_str":"206718088"}}}
-{"delete":{"status":{"id":233749992207175680,"user_id":584161811,"id_str":"233749992207175680","user_id_str":"584161811"}}}
-{"delete":{"status":{"id":365608583582334976,"user_id":634726367,"id_str":"365608583582334976","user_id_str":"634726367"}}}
-{"delete":{"status":{"id":365612538806800384,"user_id":1564813370,"id_str":"365612538806800384","user_id_str":"1564813370"}}}
-{"delete":{"status":{"id":74431149937659904,"user_id":261218323,"id_str":"74431149937659904","user_id_str":"261218323"}}}
-{"delete":{"status":{"id":365612865979293698,"user_id":53005087,"id_str":"365612865979293698","user_id_str":"53005087"}}}
-{"delete":{"status":{"id":303649385374416896,"user_id":346960220,"id_str":"303649385374416896","user_id_str":"346960220"}}}
-{"delete":{"status":{"id":138626289669124096,"user_id":402465302,"id_str":"138626289669124096","user_id_str":"402465302"}}}
-{"delete":{"status":{"id":204059738906963968,"user_id":393230991,"id_str":"204059738906963968","user_id_str":"393230991"}}}
-{"delete":{"status":{"id":173956493475979264,"user_id":341296761,"id_str":"173956493475979264","user_id_str":"341296761"}}}
-{"delete":{"status":{"id":306250919199272960,"user_id":1131831090,"id_str":"306250919199272960","user_id_str":"1131831090"}}}
-{"delete":{"status":{"id":363358431748423680,"user_id":63078428,"id_str":"363358431748423680","user_id_str":"63078428"}}}
-{"delete":{"status":{"id":306950562644119553,"user_id":221576287,"id_str":"306950562644119553","user_id_str":"221576287"}}}
-{"delete":{"status":{"id":365612706587357184,"user_id":928439221,"id_str":"365612706587357184","user_id_str":"928439221"}}}
-{"delete":{"status":{"id":277600110903431168,"user_id":941366263,"id_str":"277600110903431168","user_id_str":"941366263"}}}
-{"delete":{"status":{"id":297249124934352896,"user_id":555211712,"id_str":"297249124934352896","user_id_str":"555211712"}}}
-{"delete":{"status":{"id":288491451724214273,"user_id":26394490,"id_str":"288491451724214273","user_id_str":"26394490"}}}
-{"delete":{"status":{"id":365612933083959296,"user_id":1654400730,"id_str":"365612933083959296","user_id_str":"1654400730"}}}
-{"delete":{"status":{"id":365611955798552578,"user_id":436873994,"id_str":"365611955798552578","user_id_str":"436873994"}}}
-{"delete":{"status":{"id":365260959654223876,"user_id":1243710523,"id_str":"365260959654223876","user_id_str":"1243710523"}}}
-{"delete":{"status":{"id":208095544369881089,"user_id":245030912,"id_str":"208095544369881089","user_id_str":"245030912"}}}
-{"delete":{"status":{"id":365612874342727680,"user_id":606634592,"id_str":"365612874342727680","user_id_str":"606634592"}}}
-{"delete":{"status":{"id":365104965129216000,"user_id":1212003986,"id_str":"365104965129216000","user_id_str":"1212003986"}}}
-{"delete":{"status":{"id":312244768354729984,"user_id":470658712,"id_str":"312244768354729984","user_id_str":"470658712"}}}
-{"delete":{"status":{"id":314252682368012288,"user_id":294466600,"id_str":"314252682368012288","user_id_str":"294466600"}}}
-{"delete":{"status":{"id":302179353129779200,"user_id":346960220,"id_str":"302179353129779200","user_id_str":"346960220"}}}
-{"delete":{"status":{"id":203685195948363776,"user_id":393230991,"id_str":"203685195948363776","user_id_str":"393230991"}}}
-{"delete":{"status":{"id":365322074874605568,"user_id":102906056,"id_str":"365322074874605568","user_id_str":"102906056"}}}
-{"delete":{"status":{"id":296716771262623746,"user_id":555211712,"id_str":"296716771262623746","user_id_str":"555211712"}}}
-{"delete":{"status":{"id":365499477152366592,"user_id":402752207,"id_str":"365499477152366592","user_id_str":"402752207"}}}
-{"delete":{"status":{"id":299702075556757505,"user_id":1027610744,"id_str":"299702075556757505","user_id_str":"1027610744"}}}
-{"delete":{"status":{"id":302324597674614784,"user_id":256832640,"id_str":"302324597674614784","user_id_str":"256832640"}}}
-{"delete":{"status":{"id":365612974997639168,"user_id":286261924,"id_str":"365612974997639168","user_id_str":"286261924"}}}
-{"delete":{"status":{"id":269708876092411904,"user_id":606114977,"id_str":"269708876092411904","user_id_str":"606114977"}}}
-{"delete":{"status":{"id":314154254636023810,"user_id":294466600,"id_str":"314154254636023810","user_id_str":"294466600"}}}
-{"delete":{"status":{"id":270113148265185281,"user_id":606114977,"id_str":"270113148265185281","user_id_str":"606114977"}}}
-{"delete":{"status":{"id":361875267146358786,"user_id":434843551,"id_str":"361875267146358786","user_id_str":"434843551"}}}
-{"delete":{"status":{"id":206581014745718784,"user_id":245030912,"id_str":"206581014745718784","user_id_str":"245030912"}}}
-{"delete":{"status":{"id":216265532675067904,"user_id":26394490,"id_str":"216265532675067904","user_id_str":"26394490"}}}
-{"delete":{"status":{"id":299354023813857280,"user_id":1027610744,"id_str":"299354023813857280","user_id_str":"1027610744"}}}
-{"delete":{"status":{"id":365525246956154880,"user_id":725675066,"id_str":"365525246956154880","user_id_str":"725675066"}}}
-{"delete":{"status":{"id":203606674387378177,"user_id":393230991,"id_str":"203606674387378177","user_id_str":"393230991"}}}
-{"delete":{"status":{"id":275146321457979392,"user_id":941366263,"id_str":"275146321457979392","user_id_str":"941366263"}}}
-{"delete":{"status":{"id":365612979196149760,"user_id":270213507,"id_str":"365612979196149760","user_id_str":"270213507"}}}
-{"delete":{"status":{"id":297928170169040896,"user_id":1027610744,"id_str":"297928170169040896","user_id_str":"1027610744"}}}
-{"delete":{"status":{"id":226772461302185984,"user_id":614667649,"id_str":"226772461302185984","user_id_str":"614667649"}}}
-{"delete":{"status":{"id":361764747223384064,"user_id":237247083,"id_str":"361764747223384064","user_id_str":"237247083"}}}
-{"delete":{"status":{"id":233698997829775361,"user_id":584161811,"id_str":"233698997829775361","user_id_str":"584161811"}}}
-{"delete":{"status":{"id":365612949856976897,"user_id":286888170,"id_str":"365612949856976897","user_id_str":"286888170"}}}
-{"delete":{"status":{"id":205681726607982593,"user_id":245030912,"id_str":"205681726607982593","user_id_str":"245030912"}}}
-{"delete":{"status":{"id":205681214898700290,"user_id":245030912,"id_str":"205681214898700290","user_id_str":"245030912"}}}
-{"delete":{"status":{"id":365518246658580480,"user_id":772118754,"id_str":"365518246658580480","user_id_str":"772118754"}}}
-{"delete":{"status":{"id":37158119284932608,"user_id":22129513,"id_str":"37158119284932608","user_id_str":"22129513"}}}
-{"delete":{"status":{"id":296420556960583681,"user_id":1027610744,"id_str":"296420556960583681","user_id_str":"1027610744"}}}
-{"delete":{"status":{"id":274056641262002176,"user_id":941366263,"id_str":"274056641262002176","user_id_str":"941366263"}}}
-{"delete":{"status":{"id":347000927187791872,"user_id":1507093165,"id_str":"347000927187791872","user_id_str":"1507093165"}}}
-{"delete":{"status":{"id":344948813611532289,"user_id":237946894,"id_str":"344948813611532289","user_id_str":"237946894"}}}
-{"delete":{"status":{"id":365612962431508480,"user_id":477337365,"id_str":"365612962431508480","user_id_str":"477337365"}}}
-{"delete":{"status":{"id":364789167575674880,"user_id":1151685355,"id_str":"364789167575674880","user_id_str":"1151685355"}}}
-{"delete":{"status":{"id":305424679059988480,"user_id":309709804,"id_str":"305424679059988480","user_id_str":"309709804"}}}
-{"delete":{"status":{"id":203593395208331264,"user_id":393230991,"id_str":"203593395208331264","user_id_str":"393230991"}}}
-{"delete":{"status":{"id":295773195489910784,"user_id":1027610744,"id_str":"295773195489910784","user_id_str":"1027610744"}}}
-{"delete":{"status":{"id":247122377056600064,"user_id":316010929,"id_str":"247122377056600064","user_id_str":"316010929"}}}
-{"delete":{"status":{"id":365609565062049792,"user_id":365660522,"id_str":"365609565062049792","user_id_str":"365660522"}}}
-{"delete":{"status":{"id":313921894359379968,"user_id":294466600,"id_str":"313921894359379968","user_id_str":"294466600"}}}
-{"delete":{"status":{"id":301954202861727745,"user_id":346960220,"id_str":"301954202861727745","user_id_str":"346960220"}}}
-{"delete":{"status":{"id":295353949643497472,"user_id":1027610744,"id_str":"295353949643497472","user_id_str":"1027610744"}}}
-{"delete":{"status":{"id":203317825258000384,"user_id":393230991,"id_str":"203317825258000384","user_id_str":"393230991"}}}


[4/5] kudu git commit: arena: remove second parameter for max buffer size

Posted by to...@apache.org.
arena: remove second parameter for max buffer size

It was never very obvious how to pick a value for the max buffer size of
an Arena, and upon some reflection I think 1MB is almost always the
right choice. So, this removes the parameter for it from the
constructor, and instead adds a setter for the rare case when it needs
to be customized.

Change-Id: I56d7bb5b689c608382423038f11013b6be39e656
Reviewed-on: http://gerrit.cloudera.org:8080/8269
Tested-by: Kudu Jenkins
Reviewed-by: Todd Lipcon <to...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/892a5fc0
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/892a5fc0
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/892a5fc0

Branch: refs/heads/master
Commit: 892a5fc03d164b652ee1cef0353be0e6dd1da559
Parents: 42ed9bd
Author: Todd Lipcon <to...@apache.org>
Authored: Thu Oct 12 18:56:28 2017 -0700
Committer: Todd Lipcon <to...@apache.org>
Committed: Wed Oct 18 19:23:09 2017 +0000

----------------------------------------------------------------------
 src/kudu/cfile/binary_dict_block.cc             |  2 +-
 src/kudu/cfile/cfile-test-base.h                |  2 +-
 src/kudu/cfile/cfile-test.cc                    |  6 +-
 src/kudu/cfile/cfile_util.cc                    |  2 +-
 src/kudu/cfile/encoding-test.cc                 |  4 +-
 src/kudu/client/scan_configuration.cc           |  2 +-
 src/kudu/codegen/codegen-test.cc                |  7 +--
 src/kudu/common/column_predicate-test.cc        |  4 +-
 src/kudu/common/columnblock.h                   |  2 +-
 src/kudu/common/encoded_key-test.cc             |  4 +-
 src/kudu/common/generic_iterators-test.cc       |  4 +-
 src/kudu/common/generic_iterators.cc            |  2 +-
 src/kudu/common/key_util-test.cc                |  3 +-
 src/kudu/common/partition.cc                    |  4 +-
 src/kudu/common/partition_pruner-test.cc        |  2 +-
 src/kudu/common/partition_pruner.cc             |  4 +-
 src/kudu/common/row.h                           |  2 +-
 src/kudu/common/row_operations-test.cc          |  4 +-
 src/kudu/common/scan_spec-test.cc               |  2 +-
 src/kudu/common/schema-test.cc                  |  2 +-
 src/kudu/common/schema.cc                       |  2 +-
 src/kudu/common/wire_protocol-test.cc           | 16 ++---
 .../integration-tests/linked_list-test-util.h   |  2 +-
 src/kudu/master/sys_catalog.cc                  |  2 +-
 .../tablet/all_types-scan-correctness-test.cc   |  2 +-
 src/kudu/tablet/cbtree-test.cc                  |  6 +-
 src/kudu/tablet/cfile_set-test.cc               |  6 +-
 src/kudu/tablet/compaction-test.cc              |  2 +-
 src/kudu/tablet/compaction.cc                   |  6 +-
 src/kudu/tablet/composite-pushdown-test.cc      |  2 +-
 src/kudu/tablet/concurrent_btree.h              |  2 +-
 src/kudu/tablet/delta_compaction.cc             |  2 +-
 src/kudu/tablet/delta_store.cc                  |  4 +-
 src/kudu/tablet/deltafile-test.cc               |  2 +-
 src/kudu/tablet/deltamemstore-test.cc           |  2 +-
 src/kudu/tablet/deltamemstore.cc                |  4 +-
 src/kudu/tablet/diskrowset-test-base.h          |  6 +-
 src/kudu/tablet/memrowset-test.cc               |  2 +-
 src/kudu/tablet/memrowset.cc                    |  4 +-
 .../tablet/mt-rowset_delta_compaction-test.cc   |  2 +-
 src/kudu/tablet/mt-tablet-test.cc               |  6 +-
 src/kudu/tablet/tablet-decoder-eval-test.cc     |  6 +-
 src/kudu/tablet/tablet-pushdown-test.cc         |  4 +-
 src/kudu/tablet/tablet-test-base.h              |  4 +-
 src/kudu/tablet/tablet-test-util.h              |  4 +-
 src/kudu/tablet/tablet_random_access-test.cc    |  2 +-
 src/kudu/tablet/transactions/transaction.cc     |  2 +-
 src/kudu/tools/tool_action_common.cc            |  2 +-
 src/kudu/tools/tool_action_local_replica.cc     |  2 +-
 src/kudu/tserver/scanners.cc                    |  2 +-
 src/kudu/tserver/tablet_server-test-base.cc     |  2 +-
 src/kudu/tserver/tablet_service.cc              |  4 +-
 src/kudu/util/inline_slice-test.cc              |  2 +-
 src/kudu/util/memory/arena-test.cc              | 18 +++---
 src/kudu/util/memory/arena.cc                   | 22 +++----
 src/kudu/util/memory/arena.h                    | 63 ++++++++++++++------
 src/kudu/util/trace.cc                          | 10 +++-
 57 files changed, 159 insertions(+), 136 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/cfile/binary_dict_block.cc
----------------------------------------------------------------------
diff --git a/src/kudu/cfile/binary_dict_block.cc b/src/kudu/cfile/binary_dict_block.cc
index f00d75d..a6a4814 100644
--- a/src/kudu/cfile/binary_dict_block.cc
+++ b/src/kudu/cfile/binary_dict_block.cc
@@ -52,7 +52,7 @@ namespace cfile {
 BinaryDictBlockBuilder::BinaryDictBlockBuilder(const WriterOptions* options)
     : options_(options),
       dict_block_(options_),
-      dictionary_strings_arena_(1024, 1024*1024),
+      dictionary_strings_arena_(1024),
       mode_(kCodeWordMode) {
   data_builder_.reset(new BShufBlockBuilder<UINT32>(options_));
   // We use this invalid StringPiece for the "empty key". It's safe to build such

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/cfile/cfile-test-base.h
----------------------------------------------------------------------
diff --git a/src/kudu/cfile/cfile-test-base.h b/src/kudu/cfile/cfile-test-base.h
index 64fd35d..f7d97c5 100644
--- a/src/kudu/cfile/cfile-test-base.h
+++ b/src/kudu/cfile/cfile-test-base.h
@@ -467,7 +467,7 @@ void TimeReadFile(FsManager* fs_manager, const BlockId& block_id, size_t *count_
   ASSERT_OK(reader->NewIterator(&iter, CFileReader::CACHE_BLOCK));
   ASSERT_OK(iter->SeekToOrdinal(0));
 
-  Arena arena(8192, 1024 * 1024);
+  Arena arena(8192);
   int count = 0;
   switch (reader->type_info()->physical_type()) {
     case UINT8:

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/cfile/cfile-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/cfile/cfile-test.cc b/src/kudu/cfile/cfile-test.cc
index c9f0a09..db129a5 100644
--- a/src/kudu/cfile/cfile-test.cc
+++ b/src/kudu/cfile/cfile-test.cc
@@ -201,7 +201,7 @@ class TestCFile : public CFileTestBase {
     gscoped_ptr<CFileIterator> iter;
     ASSERT_OK(reader->NewIterator(&iter, CFileReader::CACHE_BLOCK));
 
-    Arena arena(8192, 1024 * 1024);
+    Arena arena(8192);
     ScopedColumnBlock<DataGeneratorType::kDataType> cb(10);
 
     SelectionVector sel(10);
@@ -607,7 +607,7 @@ void TestCFile::TestReadWriteStrings(EncodingType encoding,
   gscoped_ptr<CFileIterator> iter;
   ASSERT_OK(reader->NewIterator(&iter, CFileReader::CACHE_BLOCK));
 
-  Arena arena(1024, 1024*1024);
+  Arena arena(1024);
 
   ASSERT_OK(iter->SeekToOrdinal(5000));
   ASSERT_EQ(5000u, iter->GetCurrentOrdinal());
@@ -815,7 +815,7 @@ TEST_P(TestCFileBothCacheTypes, TestDefaultColumnIter) {
   // Test String Default Value
   Slice str_data[kNumItems];
   Slice str_value("Hello");
-  Arena arena(32*1024, 256*1024);
+  Arena arena(32*1024);
   DefaultColumnValueIterator str_iter(GetTypeInfo(STRING), &str_value);
   ColumnBlock str_col(GetTypeInfo(STRING), nullptr, str_data, kNumItems, &arena);
   ColumnMaterializationContext str_ctx = CreateNonDecoderEvalContext(&str_col, &sel);

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/cfile/cfile_util.cc
----------------------------------------------------------------------
diff --git a/src/kudu/cfile/cfile_util.cc b/src/kudu/cfile/cfile_util.cc
index 31c5af3..600970a 100644
--- a/src/kudu/cfile/cfile_util.cc
+++ b/src/kudu/cfile/cfile_util.cc
@@ -46,7 +46,7 @@ Status DumpIterator(const CFileReader& reader,
                     int num_rows,
                     int indent) {
 
-  Arena arena(8192, 1024 * 1024);
+  Arena arena(8192);
   uint8_t buf[kBufSize];
   const TypeInfo *type = reader.type_info();
   size_t max_rows = kBufSize/type->size();

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/cfile/encoding-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/cfile/encoding-test.cc b/src/kudu/cfile/encoding-test.cc
index 9dcdcb4..3a05c0c 100644
--- a/src/kudu/cfile/encoding-test.cc
+++ b/src/kudu/cfile/encoding-test.cc
@@ -69,7 +69,7 @@ namespace cfile {
 class TestEncoding : public KuduTest {
  public:
   TestEncoding()
-    : arena_(1024, 1024*1024) {
+    : arena_(1024) {
   }
 
  protected:
@@ -178,7 +178,7 @@ class TestEncoding : public KuduTest {
 
   template<class BuilderType, class DecoderType>
   void TestStringSeekByValueLargeBlock() {
-    Arena arena(1024, 1024*1024); // TODO: move to fixture?
+    Arena arena(1024); // TODO(todd): move to fixture?
     gscoped_ptr<WriterOptions> opts(NewWriterOptions());
     BinaryPrefixBlockBuilder sbb(opts.get());
     const uint kCount = 1000;

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/client/scan_configuration.cc
----------------------------------------------------------------------
diff --git a/src/kudu/client/scan_configuration.cc b/src/kudu/client/scan_configuration.cc
index 11abb80..fe751be 100644
--- a/src/kudu/client/scan_configuration.cc
+++ b/src/kudu/client/scan_configuration.cc
@@ -53,7 +53,7 @@ ScanConfiguration::ScanConfiguration(KuduTable* table)
       is_fault_tolerant_(false),
       snapshot_timestamp_(kNoTimestamp),
       timeout_(MonoDelta::FromMilliseconds(KuduScanner::kScanTimeoutMillis)),
-      arena_(1024, 1024 * 1024),
+      arena_(256),
       row_format_flags_(KuduScanner::NO_FLAGS) {
 }
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/codegen/codegen-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/codegen/codegen-test.cc b/src/kudu/codegen/codegen-test.cc
index 74091f4..13540e3 100644
--- a/src/kudu/codegen/codegen-test.cc
+++ b/src/kudu/codegen/codegen-test.cc
@@ -65,9 +65,8 @@ class CodegenTest : public KuduTest {
  public:
   CodegenTest()
     : random_(SeedRandom()),
-      // Set the arena size as small as possible to catch errors during relocation,
-      // for its initial size and its eventual max size.
-      projections_arena_(16, kIndirectPerProjection * 2) {
+      // Set the initial Arena size as small as possible to catch errors during relocation.
+      projections_arena_(16) {
     // Create the base schema.
     vector<ColumnSchema> cols = { ColumnSchema("key           ", UINT64, false),
                                   ColumnSchema("int32         ",  INT32, false),
@@ -87,7 +86,7 @@ class CodegenTest : public KuduTest {
     defaults_.Reset(cols, 1);
     defaults_ = SchemaBuilder(defaults_).Build(); // add IDs
 
-    test_rows_arena_.reset(new Arena(2 * 1024, 1024 * 1024));
+    test_rows_arena_.reset(new Arena(2 * 1024));
     RowBuilder rb(base_);
     for (int i = 0; i < kNumTestRows; ++i) {
       rb.AddUint64(i);

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/column_predicate-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/column_predicate-test.cc b/src/kudu/common/column_predicate-test.cc
index b9c7261..93a4e12 100644
--- a/src/kudu/common/column_predicate-test.cc
+++ b/src/kudu/common/column_predicate-test.cc
@@ -803,7 +803,7 @@ TEST_F(TestColumnPredicate, TestRangeConstructor) {
 // Test that the inclusive range constructor handles transforming to exclusive
 // upper bound correctly.
 TEST_F(TestColumnPredicate, TestInclusiveRange) {
-  Arena arena(1024, 1024 * 1024);
+  Arena arena(1024);
   {
     ColumnSchema column("c", INT32);
     int32_t zero = 0;
@@ -847,7 +847,7 @@ TEST_F(TestColumnPredicate, TestInclusiveRange) {
 // Test that the exclusive range constructor handles transforming to inclusive
 // lower bound correctly.
 TEST_F(TestColumnPredicate, TestExclusive) {
-  Arena arena(1024, 1024 * 1024);
+  Arena arena(1024);
   {
     ColumnSchema column("c", INT32);
     int32_t zero = 0;

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/columnblock.h
----------------------------------------------------------------------
diff --git a/src/kudu/common/columnblock.h b/src/kudu/common/columnblock.h
index 071e4eb..b91c316 100644
--- a/src/kudu/common/columnblock.h
+++ b/src/kudu/common/columnblock.h
@@ -217,7 +217,7 @@ class ScopedColumnBlock : public ColumnBlock {
                   new uint8_t[BitmapSize(n_rows)],
                   new cpp_type[n_rows],
                   n_rows,
-                  new Arena(1024, 1*1024*1024)),
+                  new Arena(1024)),
       null_bitmap_(null_bitmap()),
       data_(reinterpret_cast<cpp_type *>(data())),
       arena_(arena()) {

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/encoded_key-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/encoded_key-test.cc b/src/kudu/common/encoded_key-test.cc
index df84976..f256de1 100644
--- a/src/kudu/common/encoded_key-test.cc
+++ b/src/kudu/common/encoded_key-test.cc
@@ -234,7 +234,7 @@ TEST_F(EncodedKeyTest, TestDecodeCompoundKeys) {
 
 TEST_F(EncodedKeyTest, TestConstructFromEncodedString) {
   gscoped_ptr<EncodedKey> key;
-  Arena arena(1024, 1024*1024);
+  Arena arena(1024);
 
   {
     // Integer type compound key.
@@ -259,7 +259,7 @@ TEST_F(EncodedKeyTest, TestRandomStringEncoding) {
   Random r(SeedRandom());
   char buf[80];
   faststring encoded;
-  Arena arena(1024, 1024);
+  Arena arena(1024);
   for (int i = 0; i < 10000; i++) {
     encoded.clear();
     arena.Reset();

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/generic_iterators-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/generic_iterators-test.cc b/src/kudu/common/generic_iterators-test.cc
index ed5ed14..e7f9250 100644
--- a/src/kudu/common/generic_iterators-test.cc
+++ b/src/kudu/common/generic_iterators-test.cc
@@ -264,7 +264,7 @@ TEST(TestMaterializingIterator, TestMaterializingPredicatePushdown) {
   ASSERT_OK(materializing.Init(&spec));
   ASSERT_EQ(0, spec.predicates().size()) << "Iterator should have pushed down predicate";
 
-  Arena arena(1024, 1024);
+  Arena arena(1024);
   RowBlock dst(kIntSchema, 100, &arena);
   ASSERT_OK(materializing.NextBlock(&dst));
   ASSERT_EQ(dst.nrows(), 100);
@@ -312,7 +312,7 @@ TEST(TestPredicateEvaluatingIterator, TestPredicateEvaluation) {
   ASSERT_EQ(1, pred_eval->col_idx_predicates_.size())
     << "Predicate should be evaluated by the outer iterator";
 
-  Arena arena(1024, 1024);
+  Arena arena(1024);
   RowBlock dst(kIntSchema, 100, &arena);
   ASSERT_OK(outer_iter->NextBlock(&dst));
   ASSERT_EQ(dst.nrows(), 100);

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/generic_iterators.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/generic_iterators.cc b/src/kudu/common/generic_iterators.cc
index 76fcb80..66b5d8a 100644
--- a/src/kudu/common/generic_iterators.cc
+++ b/src/kudu/common/generic_iterators.cc
@@ -90,7 +90,7 @@ class MergeIterState {
  public:
   explicit MergeIterState(shared_ptr<RowwiseIterator> iter) :
       iter_(std::move(iter)),
-      arena_(1024, 256*1024),
+      arena_(1024),
       read_block_(iter_->schema(), kMergeRowBuffer, &arena_),
       next_row_idx_(0),
       num_advanced_(0),

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/key_util-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/key_util-test.cc b/src/kudu/common/key_util-test.cc
index f9bf9b8..abbf741 100644
--- a/src/kudu/common/key_util-test.cc
+++ b/src/kudu/common/key_util-test.cc
@@ -37,8 +37,7 @@ namespace kudu {
 
 class KeyUtilTest : public KuduTest {
  public:
-  KeyUtilTest()
-    : arena_(1024, 4096) {}
+  KeyUtilTest() : arena_(1024) {}
 
  protected:
   uint8_t* row_data(KuduPartialRow* row) {

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/partition.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/partition.cc b/src/kudu/common/partition.cc
index b1388db..a43aceb 100644
--- a/src/kudu/common/partition.cc
+++ b/src/kudu/common/partition.cc
@@ -720,7 +720,7 @@ string PartitionSchema::RangePartitionDebugString(Slice lower_bound,
   // Partitions are considered metadata, so don't redact them.
   ScopedDisableRedaction no_redaction;
 
-  Arena arena(1024, 128 * 1024);
+  Arena arena(256);
   KuduPartialRow lower(&schema);
   KuduPartialRow upper(&schema);
 
@@ -737,7 +737,7 @@ string PartitionSchema::RangePartitionDebugString(Slice lower_bound,
 }
 
 string PartitionSchema::RangeKeyDebugString(Slice range_key, const Schema& schema) const {
-  Arena arena(1024, 128 * 1024);
+  Arena arena(256);
   KuduPartialRow row(&schema);
 
   Status s = DecodeRangeKey(&range_key, &row, &arena);

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/partition_pruner-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/partition_pruner-test.cc b/src/kudu/common/partition_pruner-test.cc
index aba59fa..39f0e6a 100644
--- a/src/kudu/common/partition_pruner-test.cc
+++ b/src/kudu/common/partition_pruner-test.cc
@@ -71,7 +71,7 @@ void CheckPrunedPartitions(const Schema& schema,
 
   ScanSpec opt_spec(spec);
   AutoReleasePool p;
-  Arena arena(256, 1024 * 1024);
+  Arena arena(256);
   opt_spec.OptimizeScan(schema, &arena, &p, false);
 
   PartitionPruner pruner;

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/partition_pruner.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/partition_pruner.cc b/src/kudu/common/partition_pruner.cc
index e3bbebf..c5e3b6a 100644
--- a/src/kudu/common/partition_pruner.cc
+++ b/src/kudu/common/partition_pruner.cc
@@ -136,7 +136,7 @@ void EncodeRangeKeysFromPrimaryKeyBounds(const Schema& schema,
                             .type_info()
                             ->IsMinValue(scan_spec.exclusive_upper_bound_key()->raw_keys()[idx]);
       }
-      Arena arena(std::max<size_t>(Arena::kMinimumChunkSize, schema.key_byte_size()), 4096);
+      Arena arena(std::max<size_t>(Arena::kMinimumChunkSize, schema.key_byte_size()));
       if (!min_suffix) {
         if (!key_util::IncrementPrimaryKey(&row, num_range_columns, &arena)) {
           // The range-partition key upper bound can't be incremented, which
@@ -169,7 +169,7 @@ void EncodeRangeKeysFromPredicates(const Schema& schema,
 
   // Arenas must be at least the minimum chunk size, and we require at least
   // enough space for the range key columns.
-  Arena arena(std::max<size_t>(Arena::kMinimumChunkSize, schema.key_byte_size()), 4096);
+  Arena arena(std::max<size_t>(Arena::kMinimumChunkSize, schema.key_byte_size()));
   uint8_t* buf = static_cast<uint8_t*>(CHECK_NOTNULL(arena.AllocateBytes(schema.key_byte_size())));
   ContiguousRow row(&schema, buf);
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/row.h
----------------------------------------------------------------------
diff --git a/src/kudu/common/row.h b/src/kudu/common/row.h
index e667b89..ab45cb6 100644
--- a/src/kudu/common/row.h
+++ b/src/kudu/common/row.h
@@ -547,7 +547,7 @@ class RowBuilder {
  public:
   explicit RowBuilder(const Schema& schema)
     : schema_(schema),
-      arena_(1024, 1024*1024),
+      arena_(1024),
       bitmap_size_(ContiguousRowHelper::null_bitmap_size(schema)) {
     Reset();
   }

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/row_operations-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/row_operations-test.cc b/src/kudu/common/row_operations-test.cc
index 37bef46..4404c93 100644
--- a/src/kudu/common/row_operations-test.cc
+++ b/src/kudu/common/row_operations-test.cc
@@ -52,7 +52,7 @@ namespace kudu {
 class RowOperationsTest : public KuduTest {
  public:
   RowOperationsTest()
-    : arena_(1024, 128 * 1024) {
+    : arena_(1024) {
     SeedRandom();
 
     SchemaBuilder builder;
@@ -354,7 +354,7 @@ string TestProjection(RowOperationsPB::Type type,
   enc.Add(type, client_row);
 
   // Decode it
-  Arena arena(1024, 1024*1024);
+  Arena arena(1024);
   vector<DecodedRowOperation> ops;
   RowOperationsPBDecoder dec(&pb, client_row.schema(), &server_schema, &arena);
   Status s = dec.DecodeOperations(&ops);

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/scan_spec-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/scan_spec-test.cc b/src/kudu/common/scan_spec-test.cc
index ee16249..a27a8df 100644
--- a/src/kudu/common/scan_spec-test.cc
+++ b/src/kudu/common/scan_spec-test.cc
@@ -51,7 +51,7 @@ namespace kudu {
 class TestScanSpec : public KuduTest {
  public:
   explicit TestScanSpec(const Schema& s)
-    : arena_(1024, 256 * 1024),
+    : arena_(1024),
       pool_(),
       schema_(s),
       spec_() {}

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/schema-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/schema-test.cc b/src/kudu/common/schema-test.cc
index 72c2f43..c965428 100644
--- a/src/kudu/common/schema-test.cc
+++ b/src/kudu/common/schema-test.cc
@@ -304,7 +304,7 @@ TEST_F(TestSchema, TestRowOperations) {
                   ColumnSchema("col4", INT32) },
                 1);
 
-  Arena arena(1024, 256*1024);
+  Arena arena(1024);
 
   RowBuilder rb(schema);
   rb.AddString(string("row_a_1"));

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/schema.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/schema.cc b/src/kudu/common/schema.cc
index 6eeb5b9..d0f91b2 100644
--- a/src/kudu/common/schema.cc
+++ b/src/kudu/common/schema.cc
@@ -376,7 +376,7 @@ string Schema::DebugEncodedRowKey(Slice encoded_key, StartOrEnd start_or_end) co
     }
   }
 
-  Arena arena(1024, 128 * 1024);
+  Arena arena(256);
   uint8_t* buf = reinterpret_cast<uint8_t*>(arena.AllocateBytes(key_byte_size()));
   Status s = DecodeRowKey(encoded_key, buf, &arena);
   if (!s.ok()) {

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/common/wire_protocol-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/common/wire_protocol-test.cc b/src/kudu/common/wire_protocol-test.cc
index f685435..3d06b22 100644
--- a/src/kudu/common/wire_protocol-test.cc
+++ b/src/kudu/common/wire_protocol-test.cc
@@ -54,7 +54,7 @@ class WireProtocolTest : public KuduTest {
               ColumnSchema("col2", STRING),
               ColumnSchema("col3", UINT32, true /* nullable */) },
         1),
-        test_data_arena_(4096, 256 * 1024) {
+        test_data_arena_(4096) {
   }
 
   void FillRowBlockWithTestRows(RowBlock* block) {
@@ -214,7 +214,7 @@ TEST_F(WireProtocolTest, TestBadSchema_DuplicateColumnName) {
 // Create a block of rows in columnar layout and ensure that it can be
 // converted to and from protobuf.
 TEST_F(WireProtocolTest, TestColumnarRowBlockToPB) {
-  Arena arena(1024, 1024 * 1024);
+  Arena arena(1024);
   RowBlock block(schema_, 10, &arena);
   FillRowBlockWithTestRows(&block);
 
@@ -244,7 +244,7 @@ TEST_F(WireProtocolTest, TestColumnarRowBlockToPB) {
 // converted to and from protobuf.
 TEST_F(WireProtocolTest, TestColumnarRowBlockToPBWithPadding) {
   int kNumRows = 10;
-  Arena arena(1024, 1024 * 1024);
+  Arena arena(1024);
   // Create a schema with multiple UNIXTIME_MICROS columns in different
   // positions.
   Schema tablet_schema({ ColumnSchema("key", UNIXTIME_MICROS),
@@ -334,7 +334,7 @@ TEST_F(WireProtocolTest, TestColumnarRowBlockToPBWithPadding) {
 
 #ifdef NDEBUG
 TEST_F(WireProtocolTest, TestColumnarRowBlockToPBBenchmark) {
-  Arena arena(1024, 1024 * 1024);
+  Arena arena(1024);
   const int kNumTrials = AllowSlowTests() ? 100 : 10;
   RowBlock block(schema_, 10000 * kNumTrials, &arena);
   FillRowBlockWithTestRows(&block);
@@ -379,7 +379,7 @@ TEST_F(WireProtocolTest, TestInvalidRowBlock) {
 // projection (a COUNT(*) query).
 TEST_F(WireProtocolTest, TestBlockWithNoColumns) {
   Schema empty(std::vector<ColumnSchema>(), 0);
-  Arena arena(1024, 1024 * 1024);
+  Arena arena(1024);
   RowBlock block(empty, 1000, &arena);
   block.selection_vector()->SetAllTrue();
   // Unselect 100 rows
@@ -446,7 +446,7 @@ TEST_F(WireProtocolTest, TestColumnPredicateInList) {
   ColumnSchema col1("col1", INT32);
   vector<ColumnSchema> cols = { col1 };
   Schema schema(cols, 1);
-  Arena arena(1024,1024*1024);
+  Arena arena(1024);
   boost::optional<ColumnPredicate> predicate;
 
   { // col1 IN (5, 6, 10)
@@ -482,7 +482,7 @@ TEST_F(WireProtocolTest, TestColumnPredicateInList) {
     pb.set_column("col1");
     pb.mutable_in_list();
 
-    Arena arena(1024,1024*1024);
+    Arena arena(1024);
     boost::optional<ColumnPredicate> predicate;
     ASSERT_OK(ColumnPredicateFromPB(schema, &arena, pb, &predicate));
     ASSERT_EQ(PredicateType::None, predicate->predicate_type());
@@ -494,7 +494,7 @@ TEST_F(WireProtocolTest, TestColumnPredicateInList) {
     pb.mutable_in_list();
     *pb.mutable_in_list()->mutable_values()->Add() = string("\0", 1);
 
-    Arena arena(1024,1024*1024);
+    Arena arena(1024);
     boost::optional<ColumnPredicate> predicate;
     ASSERT_TRUE(ColumnPredicateFromPB(schema, &arena, pb, &predicate).IsInvalidArgument());
   }

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/integration-tests/linked_list-test-util.h
----------------------------------------------------------------------
diff --git a/src/kudu/integration-tests/linked_list-test-util.h b/src/kudu/integration-tests/linked_list-test-util.h
index 5bcf348..39b9dcd 100644
--- a/src/kudu/integration-tests/linked_list-test-util.h
+++ b/src/kudu/integration-tests/linked_list-test-util.h
@@ -672,7 +672,7 @@ Status LinkedListTester::VerifyLinkedListLocal(const tablet::Tablet* tablet,
                         "Cannot create new row iterator");
   RETURN_NOT_OK_PREPEND(iter->Init(NULL), "Cannot initialize row iterator");
 
-  Arena arena(1024, 1024);
+  Arena arena(1024);
   RowBlock block(projection, 100, &arena);
   while (iter->HasNext()) {
     RETURN_NOT_OK(iter->NextBlock(&block));

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/master/sys_catalog.cc
----------------------------------------------------------------------
diff --git a/src/kudu/master/sys_catalog.cc b/src/kudu/master/sys_catalog.cc
index 13ebfd6..fe16c96 100644
--- a/src/kudu/master/sys_catalog.cc
+++ b/src/kudu/master/sys_catalog.cc
@@ -605,7 +605,7 @@ Status SysCatalogTable::ProcessRows(
   RETURN_NOT_OK(tablet_replica_->tablet()->NewRowIterator(schema_, &iter));
   RETURN_NOT_OK(iter->Init(&spec));
 
-  Arena arena(32 * 1024, 256 * 1024);
+  Arena arena(32 * 1024);
   RowBlock block(iter->schema(), 512, &arena);
   while (iter->HasNext()) {
     RETURN_NOT_OK(iter->NextBlock(&block));

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/all_types-scan-correctness-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/all_types-scan-correctness-test.cc b/src/kudu/tablet/all_types-scan-correctness-test.cc
index af06e84..edf3a2c 100644
--- a/src/kudu/tablet/all_types-scan-correctness-test.cc
+++ b/src/kudu/tablet/all_types-scan-correctness-test.cc
@@ -301,7 +301,7 @@ public:
   // Scan the results of a query. Set "count" to the number of results satisfying the predicates.
   // ScanSpec must have all desired predicates already added to it.
   void ScanWithSpec(const Schema& schema, ScanSpec spec, int* count) {
-    Arena arena(1028, 1028);
+    Arena arena(1024);
     AutoReleasePool pool;
     *count = 0;
     spec.OptimizeScan(schema, &arena, &pool, true);

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/cbtree-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/cbtree-test.cc b/src/kudu/tablet/cbtree-test.cc
index 7e1c376..0445bbe 100644
--- a/src/kudu/tablet/cbtree-test.cc
+++ b/src/kudu/tablet/cbtree-test.cc
@@ -67,7 +67,7 @@ class TestCBTree : public KuduTest {
   }
 
   void DoBigKVTest(size_t key_size, size_t val_size) {
-    ThreadSafeArena arena(1024, 1024);
+    ThreadSafeArena arena(1024);
 
     char kbuf[key_size];
     char vbuf[val_size];
@@ -91,7 +91,7 @@ class TestCBTree : public KuduTest {
 // The nodes may come in slightly smaller than the requested size,
 // but should not be any larger.
 TEST_F(TestCBTree, TestNodeSizes) {
-  ThreadSafeArena arena(1024, 1024);
+  ThreadSafeArena arena(1024);
 
   LeafNode<BTreeTraits> lnode(false);
   ASSERT_LE(sizeof(lnode), BTreeTraits::kLeafNodeSize);
@@ -103,7 +103,7 @@ TEST_F(TestCBTree, TestNodeSizes) {
 
 TEST_F(TestCBTree, TestLeafNode) {
   LeafNode<BTreeTraits> lnode(false);
-  ThreadSafeArena arena(1024, 1024);
+  ThreadSafeArena arena(1024);
 
   Slice k1("key1");
   Slice v1("val1");

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/cfile_set-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/cfile_set-test.cc b/src/kudu/tablet/cfile_set-test.cc
index 7a55c8b..3f10929 100644
--- a/src/kudu/tablet/cfile_set-test.cc
+++ b/src/kudu/tablet/cfile_set-test.cc
@@ -118,7 +118,7 @@ class TestCFileSet : public KuduRowSetTest {
     ASSERT_OK(iter->Init(&spec));
 
     // Check that the range was respected on all the results.
-    Arena arena(1024, 1024);
+    Arena arena(1024);
     RowBlock block(schema_, 100, &arena);
     while (iter->HasNext()) {
       ASSERT_OK_FAST(iter->NextBlock(&block));
@@ -168,7 +168,7 @@ TEST_F(TestCFileSet, TestPartiallyMaterialize) {
   gscoped_ptr<CFileSet::Iterator> iter(fileset->NewIterator(&schema_));
   ASSERT_OK(iter->Init(nullptr));
 
-  Arena arena(4096, 1024*1024);
+  Arena arena(4096);
   RowBlock block(schema_, 100, &arena);
   rowid_t row_idx = 0;
   while (iter->HasNext()) {
@@ -282,7 +282,7 @@ TEST_F(TestCFileSet, TestRangeScan) {
   shared_ptr<CFileSet::Iterator> cfile_iter(fileset->NewIterator(&schema_));
   gscoped_ptr<RowwiseIterator> iter(new MaterializingIterator(cfile_iter));
   Schema key_schema = schema_.CreateKeyProjection();
-  Arena arena(1024, 256 * 1024);
+  Arena arena(1024);
   AutoReleasePool pool;
 
   // Create a scan with a range predicate on the key column.

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/compaction-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/compaction-test.cc b/src/kudu/tablet/compaction-test.cc
index 0304102..50a4786 100644
--- a/src/kudu/tablet/compaction-test.cc
+++ b/src/kudu/tablet/compaction-test.cc
@@ -109,7 +109,7 @@ class TestCompaction : public KuduRowSetTest {
     : KuduRowSetTest(CreateSchema()),
       op_id_(consensus::MaximumOpId()),
       row_builder_(schema_),
-      arena_(32*1024, 128*1024),
+      arena_(32*1024),
       clock_(clock::LogicalClock::CreateStartingAt(Timestamp::kInitialTimestamp)),
       log_anchor_registry_(new log::LogAnchorRegistry()) {
   }

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/compaction.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/compaction.cc b/src/kudu/tablet/compaction.cc
index 076ae99..89c2a3f 100644
--- a/src/kudu/tablet/compaction.cc
+++ b/src/kudu/tablet/compaction.cc
@@ -92,7 +92,7 @@ class MemRowSetCompactionInput : public CompactionInput {
                            const MvccSnapshot& snap,
                            const Schema* projection)
     : iter_(memrowset.NewIterator(projection, snap)),
-      arena_(32*1024, 128*1024),
+      arena_(32*1024),
       has_more_blocks_(false) {
   }
 
@@ -199,7 +199,7 @@ class DiskRowSetCompactionInput : public CompactionInput {
       : base_iter_(std::move(base_iter)),
         redo_delta_iter_(std::move(redo_delta_iter)),
         undo_delta_iter_(std::move(undo_delta_iter)),
-        arena_(32 * 1024, 128 * 1024),
+        arena_(32 * 1024),
         block_(base_iter_->schema(), kRowsPerBlock, &arena_),
         redo_mutation_block_(kRowsPerBlock, static_cast<Mutation *>(nullptr)),
         undo_mutation_block_(kRowsPerBlock, static_cast<Mutation *>(nullptr)),
@@ -1200,7 +1200,7 @@ Status ReupdateMissedDeltas(const string &tablet_name,
   const Schema key_schema(input->schema().CreateKeyProjection());
 
   // Arena and projector to store/project row keys for missed delta updates
-  Arena arena(1024, 1024*1024);
+  Arena arena(1024);
   RowProjector key_projector(schema, &key_schema);
   RETURN_NOT_OK(key_projector.Init());
   faststring buf;

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/composite-pushdown-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/composite-pushdown-test.cc b/src/kudu/tablet/composite-pushdown-test.cc
index 7d164da..80c1d53 100644
--- a/src/kudu/tablet/composite-pushdown-test.cc
+++ b/src/kudu/tablet/composite-pushdown-test.cc
@@ -156,7 +156,7 @@ TEST_F(CompositePushdownTest, TestPushDownExactEquality) {
 // Test for "host <= 'foo'" which should reject 'foobaz'.
 // Regression test for a bug in an earlier implementation of predicate pushdown.
 TEST_F(CompositePushdownTest, TestPushDownStringInequality) {
-  Arena arena(256, 1024);
+  Arena arena(256);
   ScanSpec spec;
   int16_t year = 2001;
   int8_t month = 9;

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/concurrent_btree.h
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/concurrent_btree.h b/src/kudu/tablet/concurrent_btree.h
index a80fa6b..f638bb0 100644
--- a/src/kudu/tablet/concurrent_btree.h
+++ b/src/kudu/tablet/concurrent_btree.h
@@ -952,7 +952,7 @@ class PreparedMutation {
 template<class Traits = BTreeTraits>
 class CBTree {
  public:
-  CBTree() : CBTree(std::make_shared<typename Traits::ArenaType>(4 * 1024, 1024 * 1024)) {
+  CBTree() : CBTree(std::make_shared<typename Traits::ArenaType>(4 * 1024)) {
   }
 
   explicit CBTree(std::shared_ptr<typename Traits::ArenaType> arena)

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/delta_compaction.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/delta_compaction.cc b/src/kudu/tablet/delta_compaction.cc
index bdefa0a..0b7fecd 100644
--- a/src/kudu/tablet/delta_compaction.cc
+++ b/src/kudu/tablet/delta_compaction.cc
@@ -122,7 +122,7 @@ Status MajorDeltaCompaction::FlushRowSetAndDeltas() {
   RETURN_NOT_OK(delta_iter_->Init(&spec));
   RETURN_NOT_OK(delta_iter_->SeekToOrdinal(0));
 
-  Arena arena(32 * 1024, 128 * 1024);
+  Arena arena(32 * 1024);
   RowBlock block(partial_schema_, kRowsPerBlock, &arena);
 
   DVLOG(1) << "Applying deltas and rewriting columns (" << partial_schema_.ToString() << ")";

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/delta_store.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/delta_store.cc b/src/kudu/tablet/delta_store.cc
index 8c9f0a3..379a2fa 100644
--- a/src/kudu/tablet/delta_store.cc
+++ b/src/kudu/tablet/delta_store.cc
@@ -63,7 +63,7 @@ Status DebugDumpDeltaIterator(DeltaType type,
 
   const size_t kRowsPerBlock = 100;
 
-  Arena arena(32 * 1024, 128 * 1024);
+  Arena arena(32 * 1024);
   for (size_t i = 0; iter->HasNext(); ) {
     size_t n;
     if (nrows > 0) {
@@ -103,7 +103,7 @@ Status WriteDeltaIteratorToFile(DeltaIterator* iter,
 
   const size_t kRowsPerBlock = 100;
   DeltaStats stats;
-  Arena arena(32 * 1024, 128 * 1024);
+  Arena arena(32 * 1024);
   for (size_t i = 0; iter->HasNext(); ) {
     size_t n;
     if (nrows > 0) {

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/deltafile-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/deltafile-test.cc b/src/kudu/tablet/deltafile-test.cc
index ab524a6..0d223d4 100644
--- a/src/kudu/tablet/deltafile-test.cc
+++ b/src/kudu/tablet/deltafile-test.cc
@@ -78,7 +78,7 @@ class TestDeltaFile : public KuduTest {
  public:
   TestDeltaFile() :
     schema_(CreateSchema()),
-    arena_(1024, 1024) {
+    arena_(1024) {
   }
 
  public:

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/deltamemstore-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/deltamemstore-test.cc b/src/kudu/tablet/deltamemstore-test.cc
index 6b77da6..8f17b34 100644
--- a/src/kudu/tablet/deltamemstore-test.cc
+++ b/src/kudu/tablet/deltamemstore-test.cc
@@ -478,7 +478,7 @@ TEST_F(TestDeltaMemStore, TestIteratorDoesUpdates) {
 }
 
 TEST_F(TestDeltaMemStore, TestCollectMutations) {
-  Arena arena(1024, 1024);
+  Arena arena(1024);
 
   // Update rows 5 and 12
   vector<uint32_t> to_update;

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/deltamemstore.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/deltamemstore.cc b/src/kudu/tablet/deltamemstore.cc
index 8adfee5..bed6dfd 100644
--- a/src/kudu/tablet/deltamemstore.cc
+++ b/src/kudu/tablet/deltamemstore.cc
@@ -54,7 +54,6 @@ using strings::Substitute;
 ////////////////////////////////////////////////////////////
 
 static const int kInitialArenaSize = 16;
-static const int kMaxArenaBufferSize = 1024*1024;
 
 Status DeltaMemStore::Create(int64_t id,
                              int64_t rs_id,
@@ -77,8 +76,7 @@ DeltaMemStore::DeltaMemStore(int64_t id,
     rs_id_(rs_id),
     allocator_(new MemoryTrackingBufferAllocator(
         HeapBufferAllocator::Get(), std::move(parent_tracker))),
-    arena_(new ThreadSafeMemoryTrackingArena(
-        kInitialArenaSize, kMaxArenaBufferSize, allocator_)),
+    arena_(new ThreadSafeMemoryTrackingArena(kInitialArenaSize, allocator_)),
     tree_(arena_),
     anchorer_(log_anchor_registry,
               Substitute("Rowset-$0/DeltaMemStore-$1", rs_id_, id_)),

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/diskrowset-test-base.h
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/diskrowset-test-base.h b/src/kudu/tablet/diskrowset-test-base.h
index e654509..cbe5c26 100644
--- a/src/kudu/tablet/diskrowset-test-base.h
+++ b/src/kudu/tablet/diskrowset-test-base.h
@@ -216,7 +216,7 @@ class TestRowSet : public KuduRowSetTest {
     gscoped_ptr<RowwiseIterator> row_iter;
     CHECK_OK(rs.NewRowIterator(&proj_val, snap, UNORDERED, &row_iter));
     CHECK_OK(row_iter->Init(NULL));
-    Arena arena(1024, 1024*1024);
+    Arena arena(1024);
     int batch_size = 10000;
     RowBlock dst(proj_val, batch_size, &arena);
 
@@ -252,7 +252,7 @@ class TestRowSet : public KuduRowSetTest {
   // asserting that the result matches 'expected_val'.
   void VerifyRandomRead(const DiskRowSet& rs, const Slice& row_key,
                         const std::string& expected_val) {
-    Arena arena(256, 1024);
+    Arena arena(256);
     AutoReleasePool pool;
     ScanSpec spec;
     auto pred = ColumnPredicate::Equality(schema_.column(0), &row_key);
@@ -279,7 +279,7 @@ class TestRowSet : public KuduRowSetTest {
     CHECK_OK(row_iter->Init(NULL));
 
     int batch_size = 1000;
-    Arena arena(1024, 1024*1024);
+    Arena arena(1024);
     RowBlock dst(schema, batch_size, &arena);
 
     int i = 0;

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/memrowset-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/memrowset-test.cc b/src/kudu/tablet/memrowset-test.cc
index 881a300..6f83971 100644
--- a/src/kudu/tablet/memrowset-test.cc
+++ b/src/kudu/tablet/memrowset-test.cc
@@ -192,7 +192,7 @@ class TestMemRowSet : public KuduTest {
     gscoped_ptr<MemRowSet::Iterator> iter(mrs->NewIterator(&schema_, snap));
     CHECK_OK(iter->Init(NULL));
 
-    Arena arena(1024, 256*1024);
+    Arena arena(1024);
     RowBlock block(schema_, 100, &arena);
     int fetched = 0;
     while (iter->HasNext()) {

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/memrowset.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/memrowset.cc b/src/kudu/tablet/memrowset.cc
index 1bfa6c7..6c8551e 100644
--- a/src/kudu/tablet/memrowset.cc
+++ b/src/kudu/tablet/memrowset.cc
@@ -62,7 +62,6 @@ using log::LogAnchorRegistry;
 using strings::Substitute;
 
 static const int kInitialArenaSize = 16;
-static const int kMaxArenaBufferSize = 1024*1024;
 
 bool MRSRow::IsGhost() const {
   bool is_ghost = false;
@@ -116,8 +115,7 @@ MemRowSet::MemRowSet(int64_t id,
     schema_(schema),
     allocator_(new MemoryTrackingBufferAllocator(HeapBufferAllocator::Get(),
                                                  CreateMemTrackerForMemRowSet(id, parent_tracker))),
-    arena_(new ThreadSafeMemoryTrackingArena(kInitialArenaSize, kMaxArenaBufferSize,
-                                             allocator_)),
+    arena_(new ThreadSafeMemoryTrackingArena(kInitialArenaSize, allocator_)),
     tree_(arena_),
     debug_insert_count_(0),
     debug_update_count_(0),

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/mt-rowset_delta_compaction-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/mt-rowset_delta_compaction-test.cc b/src/kudu/tablet/mt-rowset_delta_compaction-test.cc
index 57be241..776df6a 100644
--- a/src/kudu/tablet/mt-rowset_delta_compaction-test.cc
+++ b/src/kudu/tablet/mt-rowset_delta_compaction-test.cc
@@ -107,7 +107,7 @@ class TestMultiThreadedRowSetDeltaCompaction : public TestRowSet {
   }
 
   void ReadVerify(DiskRowSet *rs) {
-    Arena arena(1024, 1024*1024);
+    Arena arena(1024);
     RowBlock dst(schema_, 1000, &arena);
     gscoped_ptr<RowwiseIterator> iter;
     ASSERT_OK(rs->NewRowIterator(&schema_,

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/mt-tablet-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/mt-tablet-test.cc b/src/kudu/tablet/mt-tablet-test.cc
index d46155b..780d3d9 100644
--- a/src/kudu/tablet/mt-tablet-test.cc
+++ b/src/kudu/tablet/mt-tablet-test.cc
@@ -141,7 +141,7 @@ class MultiThreadedTabletTest : public TabletTestBase<SETUP> {
 
     LocalTabletWriter writer(this->tablet().get(), &this->client_schema_);
 
-    Arena tmp_arena(1024, 1024);
+    Arena tmp_arena(1024);
     RowBlock block(schema_, 1, &tmp_arena);
     faststring update_buf;
 
@@ -211,7 +211,7 @@ class MultiThreadedTabletTest : public TabletTestBase<SETUP> {
   // This is meant to test that outstanding iterators don't end up
   // trying to reference already-freed memrowset memory.
   void SlowReaderThread(int tid) {
-    Arena arena(32*1024, 256*1024);
+    Arena arena(32*1024);
     RowBlock block(schema_, 1, &arena);
 
     uint64_t max_rows = this->ClampRowCount(FLAGS_inserts_per_thread * FLAGS_num_insert_threads)
@@ -244,7 +244,7 @@ class MultiThreadedTabletTest : public TabletTestBase<SETUP> {
   }
 
   uint64_t CountSum(const shared_ptr<TimeSeries> &scanned_ts) {
-    Arena arena(1024, 1024); // unused, just scanning ints
+    Arena arena(1024); // unused, just scanning ints
 
     static const int kBufInts = 1024*1024 / 8;
     RowBlock block(valcol_projection_, kBufInts, &arena);

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/tablet-decoder-eval-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/tablet-decoder-eval-test.cc b/src/kudu/tablet/tablet-decoder-eval-test.cc
index 3522629..c49c969 100644
--- a/src/kudu/tablet/tablet-decoder-eval-test.cc
+++ b/src/kudu/tablet/tablet-decoder-eval-test.cc
@@ -158,7 +158,7 @@ public:
 
   void TestTimedScanWithBounds(size_t nrows, size_t cardinality, size_t strlen, size_t lower_val,
                                size_t upper_val, int* fetched) {
-    Arena arena(128, 1028);
+    Arena arena(128);
     AutoReleasePool pool;
     ScanSpec spec;
 
@@ -226,7 +226,7 @@ public:
                               Substitute("$0", upper).length(),
                               Substitute("$0", cardinality).length()});
     FillTestTablet(nrows, 10, strlen, -1);
-    Arena arena(128, 1028);
+    Arena arena(128);
     AutoReleasePool pool;
     ScanSpec spec;
 
@@ -257,7 +257,7 @@ public:
     ASSERT_OK(iter->Init(&spec));
     ASSERT_TRUE(spec.predicates().empty()) << "Should have accepted all predicates";
 
-    Arena ret_arena(1028, 1028);
+    Arena ret_arena(1024);
     size_t expected_count = ExpectedCount(nrows, cardinality, lower, upper);
     Schema schema = iter->schema();
     RowBlock block(schema, 100, &ret_arena);

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/tablet-pushdown-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/tablet-pushdown-test.cc b/src/kudu/tablet/tablet-pushdown-test.cc
index cabc2a3..c8c4190 100644
--- a/src/kudu/tablet/tablet-pushdown-test.cc
+++ b/src/kudu/tablet/tablet-pushdown-test.cc
@@ -104,7 +104,7 @@ class TabletPushdownTest : public KuduTabletTest,
   // the same set of rows. Run the scan and verify that the
   // expected rows are returned.
   void TestScanYieldsExpectedResults(ScanSpec spec) {
-    Arena arena(128, 1028);
+    Arena arena(128);
     AutoReleasePool pool;
     spec.OptimizeScan(schema_, &arena, &pool, true);
 
@@ -171,7 +171,7 @@ class TabletPushdownTest : public KuduTabletTest,
   // returns the expected number of rows. The rows themselves
   // should be empty.
   void TestCountOnlyScanYieldsExpectedResults(ScanSpec spec) {
-    Arena arena(128, 1028);
+    Arena arena(128);
     AutoReleasePool pool;
     spec.OptimizeScan(schema_, &arena, &pool, true);
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/tablet-test-base.h
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/tablet-test-base.h b/src/kudu/tablet/tablet-test-base.h
index d813aa7..2f99025 100644
--- a/src/kudu/tablet/tablet-test-base.h
+++ b/src/kudu/tablet/tablet-test-base.h
@@ -310,7 +310,7 @@ class TabletTestBase : public KuduTabletTest {
     KuduTabletTest(TESTSETUP::CreateSchema(), clock_type),
     setup_(),
     max_rows_(setup_.GetMaxRows()),
-    arena_(1024, 1024 * 1024)
+    arena_(1024)
   {}
 
   // Inserts "count" rows.
@@ -429,7 +429,7 @@ class TabletTestBase : public KuduTabletTest {
     ASSERT_OK(iter->Init(NULL));
     int batch_size = std::max<size_t>(1, std::min<size_t>(expected_row_count / 10,
                                                           4L * 1024 * 1024 / schema_.byte_size()));
-    Arena arena(32*1024, 256*1024);
+    Arena arena(32*1024);
     RowBlock block(schema_, batch_size, &arena);
 
     bool check_for_dups = true;

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/tablet-test-util.h
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/tablet-test-util.h b/src/kudu/tablet/tablet-test-util.h
index 4b76bac..7256502 100644
--- a/src/kudu/tablet/tablet-test-util.h
+++ b/src/kudu/tablet/tablet-test-util.h
@@ -141,7 +141,7 @@ class KuduRowSetTest : public KuduTabletTest {
 static inline Status SilentIterateToStringList(RowwiseIterator* iter,
                                                int* fetched) {
   const Schema& schema = iter->schema();
-  Arena arena(1024, 1024);
+  Arena arena(1024);
   RowBlock block(schema, 100, &arena);
   *fetched = 0;
   while (iter->HasNext()) {
@@ -160,7 +160,7 @@ static inline Status IterateToStringList(RowwiseIterator* iter,
                                          int limit = INT_MAX) {
   out->clear();
   Schema schema = iter->schema();
-  Arena arena(1024, 1024);
+  Arena arena(1024);
   RowBlock block(schema, 100, &arena);
   int fetched = 0;
   while (iter->HasNext() && fetched < limit) {

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/tablet_random_access-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/tablet_random_access-test.cc b/src/kudu/tablet/tablet_random_access-test.cc
index 4c25dec..a7c831e 100644
--- a/src/kudu/tablet/tablet_random_access-test.cc
+++ b/src/kudu/tablet/tablet_random_access-test.cc
@@ -279,7 +279,7 @@ class TestRandomAccess : public KuduTabletTest {
     optional<ExpectedKeyValueRow> ret;
     int n_results = 0;
 
-    Arena arena(1024, 1024 * 1024);
+    Arena arena(1024);
     RowBlock block(schema, 100, &arena);
     while (iter->HasNext()) {
       arena.Reset();

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tablet/transactions/transaction.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tablet/transactions/transaction.cc b/src/kudu/tablet/transactions/transaction.cc
index 7a95914..2ee867f 100644
--- a/src/kudu/tablet/transactions/transaction.cc
+++ b/src/kudu/tablet/transactions/transaction.cc
@@ -34,7 +34,7 @@ TransactionState::TransactionState(TabletReplica* tablet_replica)
     : tablet_replica_(tablet_replica),
       completion_clbk_(new TransactionCompletionCallback()),
       timestamp_error_(0),
-      arena_(1024, 1024 * 1024),
+      arena_(1024),
       external_consistency_mode_(CLIENT_PROPAGATED) {
 }
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tools/tool_action_common.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tools/tool_action_common.cc b/src/kudu/tools/tool_action_common.cc
index 35471ee..43eb723 100644
--- a/src/kudu/tools/tool_action_common.cc
+++ b/src/kudu/tools/tool_action_common.cc
@@ -209,7 +209,7 @@ Status PrintDecodedWriteRequestPB(const string& indent,
   Schema request_schema;
   RETURN_NOT_OK(SchemaFromPB(write.schema(), &request_schema));
 
-  Arena arena(32 * 1024, 1024 * 1024);
+  Arena arena(32 * 1024);
   RowOperationsPBDecoder dec(&write.row_operations(), &request_schema, &tablet_schema, &arena);
   vector<DecodedRowOperation> ops;
   RETURN_NOT_OK(dec.DecodeOperations(&ops));

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tools/tool_action_local_replica.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tools/tool_action_local_replica.cc b/src/kudu/tools/tool_action_local_replica.cc
index b654578..94b3ae7 100644
--- a/src/kudu/tools/tool_action_local_replica.cc
+++ b/src/kudu/tools/tool_action_local_replica.cc
@@ -729,7 +729,7 @@ Status DumpDeltaCFileBlockInternal(FsManager* fs_manager,
   const size_t kRowsPerBlock  = 100;
   size_t nrows = 0;
   size_t ndeltas = 0;
-  Arena arena(32 * 1024, 128 * 1024);
+  Arena arena(32 * 1024);
   RowBlock block(schema, kRowsPerBlock, &arena);
 
   // See tablet/delta_compaction.cc to understand why this loop is structured the way

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tserver/scanners.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tserver/scanners.cc b/src/kudu/tserver/scanners.cc
index 846c7b8..d328ae8 100644
--- a/src/kudu/tserver/scanners.cc
+++ b/src/kudu/tserver/scanners.cc
@@ -210,7 +210,7 @@ Scanner::Scanner(string id, const scoped_refptr<TabletReplica>& tablet_replica,
       call_seq_id_(0),
       start_time_(MonoTime::Now()),
       metrics_(metrics),
-      arena_(1024, 1024 * 1024),
+      arena_(256),
       row_format_flags_(row_format_flags) {
   if (tablet_replica_) {
     auto tablet = tablet_replica->shared_tablet();

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tserver/tablet_server-test-base.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tserver/tablet_server-test-base.cc b/src/kudu/tserver/tablet_server-test-base.cc
index 8e701ce..6bc2f75 100644
--- a/src/kudu/tserver/tablet_server-test-base.cc
+++ b/src/kudu/tserver/tablet_server-test-base.cc
@@ -391,7 +391,7 @@ void TabletServerTestBase::VerifyRows(const Schema& schema,
   const size_t batch_size =
       std::max(size_t(1), std::min(expected.size() / 10,
                                    4*1024*1024 / schema.byte_size()));
-  Arena arena(32*1024, 256*1024);
+  Arena arena(32*1024);
   RowBlock block(schema, batch_size, &arena);
 
   int count = 0;

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/tserver/tablet_service.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tserver/tablet_service.cc b/src/kudu/tserver/tablet_service.cc
index bb4bc59..e3af58b 100644
--- a/src/kudu/tserver/tablet_service.cc
+++ b/src/kudu/tserver/tablet_service.cc
@@ -1870,10 +1870,10 @@ Status TabletServiceImpl::HandleContinueScanRequest(const ScanRequestPB* req,
 
   RowwiseIterator* iter = scanner->iter();
 
-  // TODO: could size the RowBlock based on the user's requested batch size?
+  // TODO(todd): could size the RowBlock based on the user's requested batch size?
   // If people had really large indirect objects, we would currently overshoot
   // their requested batch size by a lot.
-  Arena arena(32 * 1024, 1 * 1024 * 1024);
+  Arena arena(32 * 1024);
   RowBlock block(scanner->iter()->schema(),
                  FLAGS_scanner_batch_size_rows, &arena);
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/util/inline_slice-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/util/inline_slice-test.cc b/src/kudu/util/inline_slice-test.cc
index 8435bb0..60a0005 100644
--- a/src/kudu/util/inline_slice-test.cc
+++ b/src/kudu/util/inline_slice-test.cc
@@ -59,7 +59,7 @@ static void TestRoundTrip(InlineSlice<N> *slice,
 // data
 template<size_t N>
 static void DoTest() {
-  Arena arena(1024, 4096);
+  Arena arena(1024);
 
   // Test a range of inputs both growing and shrinking
   InlineSlice<N> my_slice;

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/util/memory/arena-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/util/memory/arena-test.cc b/src/kudu/util/memory/arena-test.cc
index f4691c4..695e305 100644
--- a/src/kudu/util/memory/arena-test.cc
+++ b/src/kudu/util/memory/arena-test.cc
@@ -71,8 +71,7 @@ static void AllocateThreadTSArena(ThreadSafeArena *arena, uint8_t thread_index)
 
 
 TEST(TestArena, TestSingleThreaded) {
-  Arena arena(128, 128);
-
+  Arena arena(128);
   AllocateThread(&arena, 0);
 }
 
@@ -81,7 +80,7 @@ TEST(TestArena, TestSingleThreaded) {
 TEST(TestArena, TestMultiThreaded) {
   CHECK(FLAGS_num_threads < 256);
 
-  ThreadSafeArena arena(1024, 1024);
+  ThreadSafeArena arena(1024);
 
   vector<thread> threads;
   for (uint8_t i = 0; i < FLAGS_num_threads; i++) {
@@ -94,8 +93,7 @@ TEST(TestArena, TestMultiThreaded) {
 }
 
 TEST(TestArena, TestAlignment) {
-
-  ThreadSafeArena arena(1024, 1024);
+  ThreadSafeArena arena(1024);
   for (int i = 0; i < 1000; i++) {
     int alignment = 1 << (1 % 5);
 
@@ -110,7 +108,7 @@ TEST(TestArena, TestObjectAlignment) {
   struct MyStruct {
     int64_t v;
   };
-  Arena a(256, 256 * 1024);
+  Arena a(256);
   // Allocate a junk byte to ensure that the next allocation isn't "accidentally" aligned.
   a.AllocateBytes(1);
   void* v = a.NewObject<MyStruct>();
@@ -134,7 +132,7 @@ TEST(TestArena, TestMemoryTrackerParentReferences) {
   }
   shared_ptr<MemoryTrackingBufferAllocator> allocator(
       new MemoryTrackingBufferAllocator(HeapBufferAllocator::Get(), child_tracker));
-  MemoryTrackingArena arena(256, 1024, allocator);
+  MemoryTrackingArena arena(256, allocator);
 
   // Try some child operations.
   ASSERT_EQ(256, child_tracker->consumption());
@@ -150,7 +148,7 @@ TEST(TestArena, TestMemoryTrackingDontEnforce) {
   shared_ptr<MemTracker> mem_tracker = MemTracker::CreateTracker(1024, "arena-test-tracker");
   shared_ptr<MemoryTrackingBufferAllocator> allocator(
       new MemoryTrackingBufferAllocator(HeapBufferAllocator::Get(), mem_tracker));
-  MemoryTrackingArena arena(256, 1024, allocator);
+  MemoryTrackingArena arena(256, allocator);
   ASSERT_EQ(256, mem_tracker->consumption());
   void *allocated = arena.AllocateBytes(256);
   ASSERT_TRUE(allocated);
@@ -181,7 +179,7 @@ TEST(TestArena, TestMemoryTrackingEnforced) {
       new MemoryTrackingBufferAllocator(HeapBufferAllocator::Get(), mem_tracker,
                                         // enforce limit
                                         true));
-  MemoryTrackingArena arena(256, 1024, allocator);
+  MemoryTrackingArena arena(256, allocator);
   ASSERT_EQ(256, mem_tracker->consumption());
   void *allocated = arena.AllocateBytes(256);
   ASSERT_TRUE(allocated);
@@ -192,7 +190,7 @@ TEST(TestArena, TestMemoryTrackingEnforced) {
 }
 
 TEST(TestArena, TestSTLAllocator) {
-  Arena a(256, 256 * 1024);
+  Arena a(256);
   typedef vector<int, ArenaAllocator<int, false> > ArenaVector;
   ArenaAllocator<int, false> alloc(&a);
   ArenaVector v(alloc);

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/util/memory/arena.cc
----------------------------------------------------------------------
diff --git a/src/kudu/util/memory/arena.cc b/src/kudu/util/memory/arena.cc
index 490be0a..6eb8b9c 100644
--- a/src/kudu/util/memory/arena.cc
+++ b/src/kudu/util/memory/arena.cc
@@ -32,23 +32,25 @@ template <bool THREADSAFE>
 const size_t ArenaBase<THREADSAFE>::kMinimumChunkSize = 16;
 
 template <bool THREADSAFE>
-ArenaBase<THREADSAFE>::ArenaBase(
-  BufferAllocator* const buffer_allocator,
-  size_t initial_buffer_size,
-  size_t max_buffer_size)
+ArenaBase<THREADSAFE>::ArenaBase(BufferAllocator* buffer_allocator,
+                                 size_t initial_buffer_size)
     : buffer_allocator_(buffer_allocator),
-      max_buffer_size_(max_buffer_size),
+      max_buffer_size_(1024 * 1024),
       arena_footprint_(0) {
-  DCHECK_LE(max_buffer_size_, 1024 * 1024)
-      << "Should not use buffer sizes larger than 1MB due to tcmalloc inefficiencies";
   AddComponent(CHECK_NOTNULL(NewComponent(initial_buffer_size, 0)));
 }
 
 template <bool THREADSAFE>
-ArenaBase<THREADSAFE>::ArenaBase(size_t initial_buffer_size, size_t max_buffer_size)
+ArenaBase<THREADSAFE>::ArenaBase(size_t initial_buffer_size)
     : ArenaBase<THREADSAFE>(HeapBufferAllocator::Get(),
-                            initial_buffer_size,
-                            max_buffer_size) {
+                            initial_buffer_size) {
+}
+
+template <bool THREADSAFE>
+void ArenaBase<THREADSAFE>::SetMaxBufferSize(size_t size) {
+  DCHECK_LE(size, 1024 * 1024)
+      << "Should not use buffer sizes larger than 1MB due to tcmalloc inefficiencies";
+  max_buffer_size_ = size;
 }
 
 template <bool THREADSAFE>

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/util/memory/arena.h
----------------------------------------------------------------------
diff --git a/src/kudu/util/memory/arena.h b/src/kudu/util/memory/arena.h
index 750e9d9..36c6dc5 100644
--- a/src/kudu/util/memory/arena.h
+++ b/src/kudu/util/memory/arena.h
@@ -78,9 +78,8 @@ class ArenaBase {
   // Arenas are required to have a minimum size of at least this amount.
   static const size_t kMinimumChunkSize;
 
-  // Creates a new arena, with a single buffer of size up-to
-  // initial_buffer_size, upper size limit for later-allocated buffers capped
-  // at max_buffer_size, and maximum capacity (i.e. total sizes of all buffers)
+  // Creates a new arena, with a single buffer of size up-to initial_buffer_size
+  // and maximum capacity (i.e. total sizes of all buffers)
   // possibly limited by the buffer allocator. The allocator might cap the
   // initial allocation request arbitrarily (down to zero). As a consequence,
   // arena construction never fails due to OOM.
@@ -88,14 +87,42 @@ class ArenaBase {
   // Calls to AllocateBytes() will then give out bytes from the working buffer
   // until it is exhausted. Then, a subsequent working buffer will be allocated.
   // The size of the next buffer is normally 2x the size of the previous buffer.
-  // It might be capped by the allocator, or by the max_buffer_size parameter.
-  ArenaBase(BufferAllocator* const buffer_allocator,
-            size_t initial_buffer_size,
-            size_t max_buffer_size);
+  // It might be capped by the allocator, or by the max_buffer_size of the Arena,
+  // settable by SetMaxBufferSize below.
+  //
+  // The default maximum buffer size is 1MB. See 'SetMaxBufferSize' for details
+  // on when you would want to configure this differently.
+  ArenaBase(BufferAllocator* buffer_allocator,
+            size_t initial_buffer_size);
+
+  // Creates an arena using a default (heap) allocator.
+  explicit ArenaBase(size_t initial_buffer_size);
 
-  // Creates an arena using a default (heap) allocator with unbounded capacity.
-  // Discretion advised.
-  ArenaBase(size_t initial_buffer_size, size_t max_buffer_size);
+  // Set the maximum buffer size allocated for this arena.
+  // The maximum buffer size allowed is 1MB.
+  //
+  // Consider the following pros/cons of large buffer sizes:
+  //
+  // Pros:
+  //   - Fewer heap allocations if the arena will hold a lot of data.
+  //     (hence better allocation performance out of the arena)
+  //   - Better page locality for objects allocated out of the same arena,
+  //     especially if huge pages are in use.
+  //   - Less internal fragmentation at the "end" of each buffer if the
+  //     size of allocations from the arena is close to the size of the
+  //     buffer. For example, with a 128KB max buffer size and 65KB
+  //     allocations, we will only be able to make one allocation from
+  //     each buffer and waste nearly 50% of memory.
+  // Cons:
+  //   - Larger heap allocations may be more difficult to fulfill if the
+  //     heap is fragmented.
+  //
+  // Overall, if you aren't sure, just leave it at the default.
+  //
+  // NOTE: this method is not thread-safe, even in the thread-safe variant.
+  // It is expected to call this only immediately after constructing the
+  // Arena instance, but before making any allocations.
+  void SetMaxBufferSize(size_t size);
 
   // Adds content of the specified Slice to the arena, and returns a
   // pointer to it. The pointer is guaranteed to remain valid during the
@@ -192,7 +219,7 @@ class ArenaBase {
   // The current component to allocate from.
   // Use AcquireLoadCurrent and ReleaseStoreCurrent to load/store.
   Component* current_;
-  const size_t max_buffer_size_;
+  size_t max_buffer_size_;
   size_t arena_footprint_;
 
   // Lock covering 'slow path' allocation, when new components are
@@ -265,15 +292,15 @@ template<class T, bool THREADSAFE> class ArenaAllocator {
 
 class Arena : public ArenaBase<false> {
  public:
-  explicit Arena(size_t initial_buffer_size, size_t max_buffer_size) :
-    ArenaBase<false>(initial_buffer_size, max_buffer_size)
+  explicit Arena(size_t initial_buffer_size) :
+    ArenaBase<false>(initial_buffer_size)
   {}
 };
 
 class ThreadSafeArena : public ArenaBase<true> {
  public:
-  explicit ThreadSafeArena(size_t initial_buffer_size, size_t max_buffer_size) :
-    ArenaBase<true>(initial_buffer_size, max_buffer_size)
+  explicit ThreadSafeArena(size_t initial_buffer_size) :
+    ArenaBase<true>(initial_buffer_size)
   {}
 };
 
@@ -285,9 +312,8 @@ class MemoryTrackingArena : public ArenaBase<false> {
 
   MemoryTrackingArena(
       size_t initial_buffer_size,
-      size_t max_buffer_size,
       const std::shared_ptr<MemoryTrackingBufferAllocator>& tracking_allocator)
-      : ArenaBase<false>(tracking_allocator.get(), initial_buffer_size, max_buffer_size),
+      : ArenaBase<false>(tracking_allocator.get(), initial_buffer_size),
         tracking_allocator_(tracking_allocator) {}
 
   ~MemoryTrackingArena() {
@@ -305,9 +331,8 @@ class ThreadSafeMemoryTrackingArena : public ArenaBase<true> {
 
   ThreadSafeMemoryTrackingArena(
       size_t initial_buffer_size,
-      size_t max_buffer_size,
       const std::shared_ptr<MemoryTrackingBufferAllocator>& tracking_allocator)
-      : ArenaBase<true>(tracking_allocator.get(), initial_buffer_size, max_buffer_size),
+      : ArenaBase<true>(tracking_allocator.get(), initial_buffer_size),
         tracking_allocator_(tracking_allocator) {}
 
   ~ThreadSafeMemoryTrackingArena() {

http://git-wip-us.apache.org/repos/asf/kudu/blob/892a5fc0/src/kudu/util/trace.cc
----------------------------------------------------------------------
diff --git a/src/kudu/util/trace.cc b/src/kudu/util/trace.cc
index 7b996cf..2dc4273 100644
--- a/src/kudu/util/trace.cc
+++ b/src/kudu/util/trace.cc
@@ -45,9 +45,13 @@ namespace kudu {
 __thread Trace* Trace::threadlocal_trace_;
 
 Trace::Trace()
-  : arena_(new ThreadSafeArena(1024, 128*1024)),
-    entries_head_(nullptr),
-    entries_tail_(nullptr) {
+    : arena_(new ThreadSafeArena(1024)),
+      entries_head_(nullptr),
+      entries_tail_(nullptr) {
+  // We expect small allocations from our Arena so no need to have
+  // a large arena component. Small allocations are more likely to
+  // come out of thread cache and be fast.
+  arena_->SetMaxBufferSize(4096);
 }
 
 Trace::~Trace() {


[5/5] kudu git commit: fs: change uuid index from uint16_t to int

Posted by to...@apache.org.
fs: change uuid index from uint16_t to int

While the file block manager is restricted to 64k data directories (because
the data dir's uuid index is included in the upper 16 bits of the FBM's
block IDs), there's no such restriction for the log block manager. As such,
these types should all be int; the FBM can rely on an existing runtime check
in DataDirManager::Open to enforce that no more than 64k directories exist.

Note: I found all of these by grepping for uint16_t and excluding ports and
data types.

Change-Id: I81c8c0588b7bc8ac4a506592f8ac4c77d00fbd8b
Reviewed-on: http://gerrit.cloudera.org:8080/8287
Tested-by: Kudu Jenkins
Reviewed-by: Todd Lipcon <to...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/f96ab36a
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/f96ab36a
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/f96ab36a

Branch: refs/heads/master
Commit: f96ab36adea6d653641cd09fdb9ed92ee8d0c8bc
Parents: 892a5fc
Author: Adar Dembo <ad...@cloudera.com>
Authored: Thu Oct 12 13:50:47 2017 -0700
Committer: Todd Lipcon <to...@apache.org>
Committed: Wed Oct 18 19:23:55 2017 +0000

----------------------------------------------------------------------
 src/kudu/fs/data_dirs-test.cc         | 16 ++++-----
 src/kudu/fs/data_dirs.cc              | 56 +++++++++++++++---------------
 src/kudu/fs/data_dirs.h               | 52 +++++++++++++--------------
 src/kudu/fs/file_block_manager.cc     | 19 +++++-----
 src/kudu/fs/fs_manager.cc             |  2 +-
 src/kudu/fs/log_block_manager-test.cc |  4 +--
 src/kudu/fs/log_block_manager.cc      |  6 ++--
 src/kudu/tserver/ts_tablet_manager.cc |  2 +-
 8 files changed, 80 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/f96ab36a/src/kudu/fs/data_dirs-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/fs/data_dirs-test.cc b/src/kudu/fs/data_dirs-test.cc
index c6dd144..0c29046 100644
--- a/src/kudu/fs/data_dirs-test.cc
+++ b/src/kudu/fs/data_dirs-test.cc
@@ -201,7 +201,7 @@ TEST_F(DataDirsTest, TestFailedDirNotReturned) {
   ASSERT_OK(dd_manager_->CreateDataDirGroup(test_tablet_name_));
   DataDir* dd;
   DataDir* failed_dd;
-  uint16_t uuid_idx;
+  int uuid_idx;
   // Fail one of the directories in the group and verify that it is not used.
   ASSERT_OK(dd_manager_->GetNextDataDir(test_block_opts_, &failed_dd));
   ASSERT_TRUE(dd_manager_->FindUuidIndexByDataDir(failed_dd, &uuid_idx));
@@ -241,13 +241,13 @@ TEST_F(DataDirsTest, TestFailedDirNotAddedToGroup) {
   // Check that all uuid_indices are valid and are not in the failed directory
   // (uuid_idx 0).
   for (const string& uuid : pb.uuids()) {
-    uint16_t* uuid_idx = FindOrNull(dd_manager_->idx_by_uuid_, uuid);
+    int* uuid_idx = FindOrNull(dd_manager_->idx_by_uuid_, uuid);
     ASSERT_NE(nullptr, uuid_idx);
     ASSERT_NE(0, *uuid_idx);
   }
   dd_manager_->DeleteDataDirGroup(test_tablet_name_);
 
-  for (uint16_t i = 1; i < kNumDirs - 1; i++) {
+  for (int i = 1; i < kNumDirs - 1; i++) {
     ASSERT_OK(dd_manager_->MarkDataDirFailed(i));
   }
   Status s = dd_manager_->MarkDataDirFailed(kNumDirs - 1);
@@ -310,9 +310,9 @@ TEST_F(DataDirsTest, TestLoadBalancingBias) {
   // Note: this should not happen in the wild and is used here as a way to
   // introduce some initial skew to the distribution.
   auto uuid_idx_iter = dd_manager_->tablets_by_uuid_idx_map_.begin();
-  vector<uint16_t> skewed_dir_indices;
+  vector<int> skewed_dir_indices;
   for (int i = 0; i < kNumSkewedDirs; i++) {
-    uint16_t uuid_idx = uuid_idx_iter->first;
+    int uuid_idx = uuid_idx_iter->first;
     skewed_dir_indices.push_back(uuid_idx);
     uuid_idx_iter++;
   }
@@ -321,7 +321,7 @@ TEST_F(DataDirsTest, TestLoadBalancingBias) {
   for (int skew_tablet_idx = 0; skew_tablet_idx < kTabletsPerSkewedDir; skew_tablet_idx++) {
     string skew_tablet = Substitute("$0-$1", kSkewTabletPrefix, skew_tablet_idx);
     InsertOrDie(&dd_manager_->group_by_tablet_map_, skew_tablet, DataDirGroup(skewed_dir_indices));
-    for (uint16_t uuid_idx : skewed_dir_indices) {
+    for (int uuid_idx : skewed_dir_indices) {
       InsertOrDie(&FindOrDie(dd_manager_->tablets_by_uuid_idx_map_, uuid_idx), skew_tablet);
     }
   }
@@ -352,7 +352,7 @@ TEST_F(DataDirsTest, TestLoadBalancingBias) {
   // having the mean, 10, tablets. Instead, the block-placement heuristic should
   // not completely ignore the initially skewed dirs.
   bool some_added_to_skewed_dirs = false;
-  for (uint16_t skewed_uuid_index : skewed_dir_indices) {
+  for (int skewed_uuid_index : skewed_dir_indices) {
     set<string>* tablets = FindOrNull(dd_manager_->tablets_by_uuid_idx_map_, skewed_uuid_index);
     ASSERT_NE(nullptr, tablets);
     if (tablets->size() > kTabletsPerSkewedDir) {
@@ -401,7 +401,7 @@ TEST_F(DataDirManagerTest, TestOpenWithFailedDirs) {
 
   // The directory manager will successfully open with the single failed directory.
   ASSERT_OK(OpenDataDirManager());
-  set<uint16_t> failed_dirs;
+  set<int> failed_dirs;
   ASSERT_EQ(1, dd_manager_->GetFailedDataDirs().size());
 
   // Now fail almost all of the other directories, leaving the first intact.

http://git-wip-us.apache.org/repos/asf/kudu/blob/f96ab36a/src/kudu/fs/data_dirs.cc
----------------------------------------------------------------------
diff --git a/src/kudu/fs/data_dirs.cc b/src/kudu/fs/data_dirs.cc
index ac839b0..1143514 100644
--- a/src/kudu/fs/data_dirs.cc
+++ b/src/kudu/fs/data_dirs.cc
@@ -431,7 +431,7 @@ Status DataDirManager::Open() {
   } else {
     lock_mode = LockMode::MANDATORY;
   }
-  int max_data_dirs = block_manager_type_ == "file" ? (1 << 16) - 1 : kuint32max;
+  const int kMaxDataDirs = block_manager_type_ == "file" ? (1 << 16) - 1 : kint32max;
 
   int i = 0;
   // Create a directory for all data dirs specified by the user.
@@ -529,7 +529,7 @@ Status DataDirManager::Open() {
   TabletsByUuidIndexMap tablets_by_uuid_idx_map;
   FailedDataDirSet failed_data_dirs;
 
-  const auto insert_to_maps = [&] (uint16_t idx, string uuid, DataDir* dd) {
+  const auto insert_to_maps = [&] (int idx, string uuid, DataDir* dd) {
     InsertOrDie(&uuid_by_root, DirName(dd->dir()), uuid);
     InsertOrDie(&uuid_by_idx, idx, uuid);
     InsertOrDie(&idx_by_uuid, uuid, idx);
@@ -547,7 +547,7 @@ Status DataDirManager::Open() {
       continue;
     }
     const PathSetPB& path_set = dd->instance()->metadata()->path_set();
-    uint32_t idx = -1;
+    int idx = -1;
     for (int i = 0; i < path_set.all_uuids_size(); i++) {
       if (path_set.uuid() == path_set.all_uuids(i)) {
         idx = i;
@@ -555,9 +555,9 @@ Status DataDirManager::Open() {
       }
     }
     DCHECK_NE(idx, -1); // Guaranteed by CheckIntegrity().
-    if (idx > max_data_dirs) {
+    if (idx > kMaxDataDirs) {
       return Status::NotSupported(
-          Substitute("Block manager supports a maximum of $0 paths", max_data_dirs));
+          Substitute("Block manager supports a maximum of $0 paths", kMaxDataDirs));
     }
     insert_to_maps(idx, path_set.uuid(), dd.get());
   }
@@ -597,7 +597,7 @@ Status DataDirManager::Open() {
 
   // Initialize the 'fullness' status of the data directories.
   for (const auto& dd : data_dirs_) {
-    uint16_t uuid_idx;
+    int uuid_idx;
     CHECK(FindUuidIndexByDataDir(dd.get(), &uuid_idx));
     if (ContainsKey(failed_data_dirs_, uuid_idx)) {
       continue;
@@ -626,7 +626,7 @@ Status DataDirManager::LoadDataDirGroupFromPB(const std::string& tablet_id,
     return Status::AlreadyPresent("Tried to load directory group for tablet but one is already "
                                   "registered", tablet_id);
   }
-  for (uint16_t uuid_idx : group_from_pb.uuid_indices()) {
+  for (int uuid_idx : group_from_pb.uuid_indices()) {
     InsertOrDie(&FindOrDie(tablets_by_uuid_idx_map_, uuid_idx), tablet_id);
   }
   return Status::OK();
@@ -647,7 +647,7 @@ Status DataDirManager::CreateDataDirGroup(const string& tablet_id,
     group_target_size = std::min(FLAGS_fs_target_data_dirs_per_tablet,
                                  static_cast<int>(data_dirs_.size()));
   }
-  vector<uint16_t> group_indices;
+  vector<int> group_indices;
   if (mode == DirDistributionMode::ACROSS_ALL_DIRS) {
     // If using all dirs, add all regardless of directory state.
     AppendKeysFromMap(data_dir_by_uuid_idx_, &group_indices);
@@ -675,7 +675,7 @@ Status DataDirManager::CreateDataDirGroup(const string& tablet_id,
     }
   }
   InsertOrDie(&group_by_tablet_map_, tablet_id, DataDirGroup(group_indices));
-  for (uint16_t uuid_idx : group_indices) {
+  for (int uuid_idx : group_indices) {
     InsertOrDie(&FindOrDie(tablets_by_uuid_idx_map_, uuid_idx), tablet_id);
   }
   return Status::OK();
@@ -683,8 +683,8 @@ Status DataDirManager::CreateDataDirGroup(const string& tablet_id,
 
 Status DataDirManager::GetNextDataDir(const CreateBlockOptions& opts, DataDir** dir) {
   shared_lock<rw_spinlock> lock(dir_group_lock_.get_lock());
-  const vector<uint16_t>* group_uuid_indices;
-  vector<uint16_t> valid_uuid_indices;
+  const vector<int>* group_uuid_indices;
+  vector<int> valid_uuid_indices;
   if (PREDICT_TRUE(!opts.tablet_id.empty())) {
     // Get the data dir group for the tablet.
     DataDirGroup* group = FindOrNull(group_by_tablet_map_, opts.tablet_id);
@@ -715,7 +715,7 @@ Status DataDirManager::GetNextDataDir(const CreateBlockOptions& opts, DataDir**
 
   // Randomly select a member of the group that is not full.
   for (int i : random_indices) {
-    uint16_t uuid_idx = (*group_uuid_indices)[i];
+    int uuid_idx = (*group_uuid_indices)[i];
     DataDir* candidate = FindOrDie(data_dir_by_uuid_idx_, uuid_idx);
     RETURN_NOT_OK(candidate->RefreshIsFull(DataDir::RefreshMode::EXPIRED_ONLY));
     if (!candidate->is_full()) {
@@ -744,7 +744,7 @@ void DataDirManager::DeleteDataDirGroup(const std::string& tablet_id) {
     return;
   }
   // Remove the tablet_id from every data dir in its group.
-  for (uint16_t uuid_idx : group->uuid_indices()) {
+  for (int uuid_idx : group->uuid_indices()) {
     FindOrDie(tablets_by_uuid_idx_map_, uuid_idx).erase(tablet_id);
   }
   group_by_tablet_map_.erase(tablet_id);
@@ -762,9 +762,9 @@ bool DataDirManager::GetDataDirGroupPB(const std::string& tablet_id,
 }
 
 Status DataDirManager::GetDirsForGroupUnlocked(int target_size,
-                                               vector<uint16_t>* group_indices) {
+                                               vector<int>* group_indices) {
   DCHECK(dir_group_lock_.is_locked());
-  vector<uint16_t> candidate_indices;
+  vector<int> candidate_indices;
   for (auto& e : data_dir_by_uuid_idx_) {
     if (ContainsKey(failed_data_dirs_, e.first)) {
       continue;
@@ -792,16 +792,16 @@ Status DataDirManager::GetDirsForGroupUnlocked(int target_size,
   return Status::OK();
 }
 
-DataDir* DataDirManager::FindDataDirByUuidIndex(uint16_t uuid_idx) const {
+DataDir* DataDirManager::FindDataDirByUuidIndex(int uuid_idx) const {
   DCHECK_LT(uuid_idx, data_dirs_.size());
   return FindPtrOrNull(data_dir_by_uuid_idx_, uuid_idx);
 }
 
-bool DataDirManager::FindUuidIndexByDataDir(DataDir* dir, uint16_t* uuid_idx) const {
+bool DataDirManager::FindUuidIndexByDataDir(DataDir* dir, int* uuid_idx) const {
   return FindCopy(uuid_idx_by_data_dir_, dir, uuid_idx);
 }
 
-bool DataDirManager::FindUuidIndexByRoot(const string& root, uint16_t* uuid_idx) const {
+bool DataDirManager::FindUuidIndexByRoot(const string& root, int* uuid_idx) const {
   string uuid;
   if (FindUuidByRoot(root, &uuid)) {
     return FindUuidIndexByUuid(uuid, uuid_idx);
@@ -809,7 +809,7 @@ bool DataDirManager::FindUuidIndexByRoot(const string& root, uint16_t* uuid_idx)
   return false;
 }
 
-bool DataDirManager::FindUuidIndexByUuid(const string& uuid, uint16_t* uuid_idx) const {
+bool DataDirManager::FindUuidIndexByUuid(const string& uuid, int* uuid_idx) const {
   return FindCopy(idx_by_uuid_, uuid, uuid_idx);
 }
 
@@ -817,7 +817,7 @@ bool DataDirManager::FindUuidByRoot(const string& root, string* uuid) const {
   return FindCopy(uuid_by_root_, root, uuid);
 }
 
-set<string> DataDirManager::FindTabletsByDataDirUuidIdx(uint16_t uuid_idx) const {
+set<string> DataDirManager::FindTabletsByDataDirUuidIdx(int uuid_idx) const {
   DCHECK_LT(uuid_idx, data_dirs_.size());
   shared_lock<rw_spinlock> lock(dir_group_lock_.get_lock());
   const set<string>* tablet_set_ptr = FindOrNull(tablets_by_uuid_idx_map_, uuid_idx);
@@ -828,12 +828,12 @@ set<string> DataDirManager::FindTabletsByDataDirUuidIdx(uint16_t uuid_idx) const
 }
 
 void DataDirManager::MarkDataDirFailedByUuid(const string& uuid) {
-  uint16_t uuid_idx;
+  int uuid_idx;
   CHECK(FindUuidIndexByUuid(uuid, &uuid_idx));
   WARN_NOT_OK(MarkDataDirFailed(uuid_idx), "Failed to handle disk failure");
 }
 
-Status DataDirManager::MarkDataDirFailed(uint16_t uuid_idx, const string& error_message) {
+Status DataDirManager::MarkDataDirFailed(int uuid_idx, const string& error_message) {
   DCHECK_LT(uuid_idx, data_dirs_.size());
   std::lock_guard<percpu_rwlock> lock(dir_group_lock_);
   DataDir* dd = FindDataDirByUuidIndex(uuid_idx);
@@ -856,15 +856,15 @@ Status DataDirManager::MarkDataDirFailed(uint16_t uuid_idx, const string& error_
   return Status::OK();
 }
 
-bool DataDirManager::IsDataDirFailed(uint16_t uuid_idx) const {
+bool DataDirManager::IsDataDirFailed(int uuid_idx) const {
   DCHECK_LT(uuid_idx, data_dirs_.size());
   shared_lock<rw_spinlock> lock(dir_group_lock_.get_lock());
   return ContainsKey(failed_data_dirs_, uuid_idx);
 }
 
 bool DataDirManager::IsTabletInFailedDir(const string& tablet_id) const {
-  const set<uint16_t> failed_dirs = GetFailedDataDirs();
-  for (uint16_t failed_dir : failed_dirs) {
+  const set<int> failed_dirs = GetFailedDataDirs();
+  for (int failed_dir : failed_dirs) {
     if (ContainsKey(FindTabletsByDataDirUuidIdx(failed_dir), tablet_id)) {
       return true;
     }
@@ -872,13 +872,13 @@ bool DataDirManager::IsTabletInFailedDir(const string& tablet_id) const {
   return false;
 }
 
-void DataDirManager::RemoveUnhealthyDataDirsUnlocked(const vector<uint16_t>& uuid_indices,
-                                                     vector<uint16_t>* healthy_indices) const {
+void DataDirManager::RemoveUnhealthyDataDirsUnlocked(const vector<int>& uuid_indices,
+                                                     vector<int>* healthy_indices) const {
   if (PREDICT_TRUE(failed_data_dirs_.empty())) {
     return;
   }
   healthy_indices->clear();
-  for (uint16_t uuid_idx : uuid_indices) {
+  for (int uuid_idx : uuid_indices) {
     DCHECK_LT(uuid_idx, data_dirs_.size());
     if (!ContainsKey(failed_data_dirs_, uuid_idx)) {
       healthy_indices->emplace_back(uuid_idx);

http://git-wip-us.apache.org/repos/asf/kudu/blob/f96ab36a/src/kudu/fs/data_dirs.h
----------------------------------------------------------------------
diff --git a/src/kudu/fs/data_dirs.h b/src/kudu/fs/data_dirs.h
index 0ac01da..1dca128 100644
--- a/src/kudu/fs/data_dirs.h
+++ b/src/kudu/fs/data_dirs.h
@@ -57,8 +57,8 @@ typedef std::vector<CanonicalizedRootAndStatus> CanonicalizedRootsList;
 
 namespace fs {
 
-typedef std::unordered_map<uint16_t, std::string> UuidByUuidIndexMap;
-typedef std::unordered_map<std::string, uint16_t> UuidIndexByUuidMap;
+typedef std::unordered_map<int, std::string> UuidByUuidIndexMap;
+typedef std::unordered_map<std::string, int> UuidIndexByUuidMap;
 
 class PathInstanceMetadataFile;
 struct CreateBlockOptions;
@@ -68,20 +68,20 @@ const char kInstanceMetadataFileName[] = "block_manager_instance";
 namespace internal {
 
 // A DataDirGroup is a group of directories used by an entity for block
-// placement. A group is represented in memory by a list of 2-byte indices,
-// which index into the list of all UUIDs found in a PathSetPB. A group is
-// represented on-disk as a list of full UUIDs, and as such, when writing or
-// reading from disk, a mapping is needed to translate between index and UUID.
+// placement. A group is represented in memory by a list of indices which index
+// into the list of all UUIDs found in a PathSetPB. A group is represented
+// on-disk as a list of full UUIDs, and as such, when writing or reading from
+// disk, a mapping is needed to translate between index and UUID.
 //
 // The same directory may appear in multiple DataDirGroups.
 class DataDirGroup {
  public:
-  explicit DataDirGroup(std::vector<uint16_t> uuid_indices)
+  explicit DataDirGroup(std::vector<int> uuid_indices)
       : uuid_indices_(std::move(uuid_indices)) {}
 
   static DataDirGroup FromPB(const DataDirGroupPB& pb,
                              const UuidIndexByUuidMap& uuid_idx_by_uuid) {
-    std::vector<uint16_t> uuid_indices;
+    std::vector<int> uuid_indices;
     for (const std::string& uuid : pb.uuids()) {
       uuid_indices.push_back(FindOrDie(uuid_idx_by_uuid, uuid));
     }
@@ -92,17 +92,17 @@ class DataDirGroup {
                 DataDirGroupPB* pb) const {
     DCHECK(pb);
     DataDirGroupPB group;
-    for (uint16_t uuid_idx : uuid_indices_) {
+    for (int uuid_idx : uuid_indices_) {
       group.add_uuids(FindOrDie(uuid_by_uuid_idx, uuid_idx));
     }
     pb->Swap(&group);
   }
 
-  const std::vector<uint16_t>& uuid_indices() const { return uuid_indices_; }
+  const std::vector<int>& uuid_indices() const { return uuid_indices_; }
 
  private:
   // UUID indices corresponding to the data directories within the group.
-  const std::vector<uint16_t> uuid_indices_;
+  const std::vector<int> uuid_indices_;
 };
 
 }  // namespace internal
@@ -313,7 +313,7 @@ class DataDirManager {
 
   // Finds the set of tablet_ids in the data dir specified by 'uuid_idx' and
   // returns a copy, returning an empty set if none are found.
-  std::set<std::string> FindTabletsByDataDirUuidIdx(uint16_t uuid_idx) const;
+  std::set<std::string> FindTabletsByDataDirUuidIdx(int uuid_idx) const;
 
   // ==========================================================================
   // Directory Health
@@ -324,19 +324,19 @@ class DataDirManager {
   // describing what directories are affected.
   //
   // Returns an error if all directories have failed.
-  Status MarkDataDirFailed(uint16_t uuid_idx, const std::string& error_message = "");
+  Status MarkDataDirFailed(int uuid_idx, const std::string& error_message = "");
 
   // Fails the directory specified by 'uuid' and logs a warning if all
   // directories have failed.
   void MarkDataDirFailedByUuid(const std::string& uuid);
 
   // Returns whether or not the 'uuid_idx' refers to a failed directory.
-  bool IsDataDirFailed(uint16_t uuid_idx) const;
+  bool IsDataDirFailed(int uuid_idx) const;
 
   // Returns whether the tablet's data is spread across a failed directory.
   bool IsTabletInFailedDir(const std::string& tablet_id) const;
 
-  const std::set<uint16_t> GetFailedDataDirs() const {
+  const std::set<int> GetFailedDataDirs() const {
     shared_lock<rw_spinlock> group_lock(dir_group_lock_.get_lock());
     return failed_data_dirs_;
   }
@@ -360,16 +360,16 @@ class DataDirManager {
   //
   // More information on uuid indexes and their relation to data directories
   // can be found next to PathSetPB in fs.proto.
-  DataDir* FindDataDirByUuidIndex(uint16_t uuid_idx) const;
+  DataDir* FindDataDirByUuidIndex(int uuid_idx) const;
 
   // Finds a uuid index by data directory, returning false if it can't be found.
-  bool FindUuidIndexByDataDir(DataDir* dir, uint16_t* uuid_idx) const;
+  bool FindUuidIndexByDataDir(DataDir* dir, int* uuid_idx) const;
 
   // Finds a uuid index by root path, returning false if it can't be found.
-  bool FindUuidIndexByRoot(const std::string& root, uint16_t* uuid_idx) const;
+  bool FindUuidIndexByRoot(const std::string& root, int* uuid_idx) const;
 
   // Finds a uuid index by UUID, returning false if it can't be found.
-  bool FindUuidIndexByUuid(const std::string& uuid, uint16_t* uuid_idx) const;
+  bool FindUuidIndexByUuid(const std::string& uuid, int* uuid_idx) const;
 
   // Finds a UUID by canonicalized root name, returning false if it can't be found.
   bool FindUuidByRoot(const std::string& root, std::string* uuid) const;
@@ -414,12 +414,12 @@ class DataDirManager {
   // added. Although this function does not itself change DataDirManager state,
   // its expected usage warrants that it is called within the scope of a
   // lock_guard of dir_group_lock_.
-  Status GetDirsForGroupUnlocked(int target_size, std::vector<uint16_t>* group_indices);
+  Status GetDirsForGroupUnlocked(int target_size, std::vector<int>* group_indices);
 
   // Goes through the data dirs in 'uuid_indices' and populates
   // 'healthy_indices' with those that haven't failed.
-  void RemoveUnhealthyDataDirsUnlocked(const std::vector<uint16_t>& uuid_indices,
-                                       std::vector<uint16_t>* healthy_indices) const;
+  void RemoveUnhealthyDataDirsUnlocked(const std::vector<int>& uuid_indices,
+                                       std::vector<int>* healthy_indices) const;
 
   Env* env_;
   const std::string block_manager_type_;
@@ -438,22 +438,22 @@ class DataDirManager {
   typedef std::unordered_map<std::string, std::string> UuidByRootMap;
   UuidByRootMap uuid_by_root_;
 
-  typedef std::unordered_map<uint16_t, DataDir*> UuidIndexMap;
+  typedef std::unordered_map<int, DataDir*> UuidIndexMap;
   UuidIndexMap data_dir_by_uuid_idx_;
 
-  typedef std::unordered_map<DataDir*, uint16_t> ReverseUuidIndexMap;
+  typedef std::unordered_map<DataDir*, int> ReverseUuidIndexMap;
   ReverseUuidIndexMap uuid_idx_by_data_dir_;
 
   typedef std::unordered_map<std::string, internal::DataDirGroup> TabletDataDirGroupMap;
   TabletDataDirGroupMap group_by_tablet_map_;
 
-  typedef std::unordered_map<uint16_t, std::set<std::string>> TabletsByUuidIndexMap;
+  typedef std::unordered_map<int, std::set<std::string>> TabletsByUuidIndexMap;
   TabletsByUuidIndexMap tablets_by_uuid_idx_map_;
 
   UuidByUuidIndexMap uuid_by_idx_;
   UuidIndexByUuidMap idx_by_uuid_;
 
-  typedef std::set<uint16_t> FailedDataDirSet;
+  typedef std::set<int> FailedDataDirSet;
   FailedDataDirSet failed_data_dirs_;
 
   // Lock protecting access to the dir group maps and to failed_data_dirs_.

http://git-wip-us.apache.org/repos/asf/kudu/blob/f96ab36a/src/kudu/fs/file_block_manager.cc
----------------------------------------------------------------------
diff --git a/src/kudu/fs/file_block_manager.cc b/src/kudu/fs/file_block_manager.cc
index 6694b88..788c191 100644
--- a/src/kudu/fs/file_block_manager.cc
+++ b/src/kudu/fs/file_block_manager.cc
@@ -37,6 +37,7 @@
 #include "kudu/fs/fs_report.h"
 #include "kudu/gutil/bind.h"
 #include "kudu/gutil/casts.h"
+#include "kudu/gutil/integral_types.h"
 #include "kudu/gutil/map-util.h"
 #include "kudu/gutil/port.h"
 #include "kudu/gutil/ref_counted.h"
@@ -99,7 +100,7 @@ class FileBlockLocation {
 
   // Construct a location from its constituent parts.
   static FileBlockLocation FromParts(DataDir* data_dir,
-                                     uint16_t data_dir_idx,
+                                     int data_dir_idx,
                                      const BlockId& block_id);
 
   // Construct a location from a full block ID.
@@ -107,7 +108,7 @@ class FileBlockLocation {
                                        const BlockId& block_id);
 
   // Get the data dir index of a given block ID.
-  static uint16_t GetDataDirIdx(const BlockId& block_id) {
+  static int GetDataDirIdx(const BlockId& block_id) {
     return block_id.id() >> 48;
   }
 
@@ -154,8 +155,10 @@ class FileBlockLocation {
 };
 
 FileBlockLocation FileBlockLocation::FromParts(DataDir* data_dir,
-                                               uint16_t data_dir_idx,
+                                               int data_dir_idx,
                                                const BlockId& block_id) {
+  DCHECK_LT(data_dir_idx, kuint16max);
+
   // The combined ID consists of 'data_dir_idx' (top 2 bytes) and 'block_id'
   // (bottom 6 bytes). The top 2 bytes of 'block_id' are dropped.
   uint64_t combined_id = static_cast<uint64_t>(data_dir_idx) << 48;
@@ -704,14 +707,14 @@ Status FileBlockManager::Open(FsReport* report) {
 
   // Prepare the filesystem report and either return or log it.
   FsReport local_report;
-  set<uint16_t> failed_dirs = dd_manager_->GetFailedDataDirs();
+  set<int> failed_dirs = dd_manager_->GetFailedDataDirs();
   for (const auto& dd : dd_manager_->data_dirs()) {
     // Don't report failed directories.
     // TODO(KUDU-2111): currently the FsReport only reports on containers for
     // the log block manager. Implement some sort of reporting for failed
     // directories as well.
     if (PREDICT_FALSE(!failed_dirs.empty())) {
-      uint16_t uuid_idx;
+      int uuid_idx;
       CHECK(dd_manager_->FindUuidIndexByDataDir(dd.get(), &uuid_idx));
       if (ContainsKey(failed_dirs, uuid_idx)) {
         continue;
@@ -734,7 +737,7 @@ Status FileBlockManager::CreateBlock(const CreateBlockOptions& opts,
 
   DataDir* dir;
   RETURN_NOT_OK(dd_manager_->GetNextDataDir(opts, &dir));
-  uint16_t uuid_idx;
+  int uuid_idx;
   CHECK(dd_manager_->FindUuidIndexByDataDir(dir, &uuid_idx));
 
   string path;
@@ -819,9 +822,9 @@ Status FileBlockManager::DeleteBlock(const BlockId& block_id) {
   CHECK(!read_only_);
 
   // Return early if deleting a block in a failed directory.
-  set<uint16_t> failed_dirs = dd_manager_->GetFailedDataDirs();
+  set<int> failed_dirs = dd_manager_->GetFailedDataDirs();
   if (PREDICT_FALSE(!failed_dirs.empty())) {
-    uint16_t uuid_idx = internal::FileBlockLocation::GetDataDirIdx(block_id);
+    int uuid_idx = internal::FileBlockLocation::GetDataDirIdx(block_id);
     if (ContainsKey(failed_dirs, uuid_idx)) {
       LOG_EVERY_N(INFO, 10) << Substitute("Block $0 is in a failed directory; not deleting",
                                           block_id.ToString());

http://git-wip-us.apache.org/repos/asf/kudu/blob/f96ab36a/src/kudu/fs/fs_manager.cc
----------------------------------------------------------------------
diff --git a/src/kudu/fs/fs_manager.cc b/src/kudu/fs/fs_manager.cc
index 4457ab0..a68769c 100644
--- a/src/kudu/fs/fs_manager.cc
+++ b/src/kudu/fs/fs_manager.cc
@@ -345,7 +345,7 @@ Status FsManager::Open(FsReport* report) {
   // Before returning, ensure the metadata directory has not failed.
   // TODO(awong): avoid this single point of failure by spreading metadata
   // across directories.
-  uint16_t metadata_idx;
+  int metadata_idx;
   CHECK(dd_manager_->FindUuidIndexByRoot(canonicalized_metadata_fs_root_.path, &metadata_idx));
   if (ContainsKey(dd_manager_->GetFailedDataDirs(), metadata_idx)) {
     return Status::IOError("Cannot open the FS layout; metadata directory failed");

http://git-wip-us.apache.org/repos/asf/kudu/blob/f96ab36a/src/kudu/fs/log_block_manager-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/fs/log_block_manager-test.cc b/src/kudu/fs/log_block_manager-test.cc
index 5dc5099..9a23c0c 100644
--- a/src/kudu/fs/log_block_manager-test.cc
+++ b/src/kudu/fs/log_block_manager-test.cc
@@ -1417,10 +1417,10 @@ TEST_F(LogBlockManagerTest, TestOpenWithFailedDirectories) {
   for (const string& data_dir : report.data_dirs) {
     ASSERT_NE(data_dir, test_dirs[failed_idx]);
   }
-  const set<uint16_t>& failed_dirs = dd_manager_->GetFailedDataDirs();
+  const set<int>& failed_dirs = dd_manager_->GetFailedDataDirs();
   ASSERT_EQ(1, failed_dirs.size());
 
-  uint16_t uuid_idx;
+  int uuid_idx;
   dd_manager_->FindUuidIndexByRoot(test_dirs[failed_idx], &uuid_idx);
   ASSERT_TRUE(ContainsKey(failed_dirs, uuid_idx));
   FLAGS_env_inject_eio = 0;

http://git-wip-us.apache.org/repos/asf/kudu/blob/f96ab36a/src/kudu/fs/log_block_manager.cc
----------------------------------------------------------------------
diff --git a/src/kudu/fs/log_block_manager.cc b/src/kudu/fs/log_block_manager.cc
index 5f3d365..b9a9322 100644
--- a/src/kudu/fs/log_block_manager.cc
+++ b/src/kudu/fs/log_block_manager.cc
@@ -1724,7 +1724,7 @@ Status LogBlockManager::Open(FsReport* report) {
   int i = -1;
   for (const auto& dd : dd_manager_->data_dirs()) {
     i++;
-    uint16_t uuid_idx;
+    int uuid_idx;
     CHECK(dd_manager_->FindUuidIndexByDataDir(dd.get(), &uuid_idx));
     // TODO(awong): store Statuses for each directory in the directory manager
     // so we can avoid these artificial Statuses.
@@ -1841,9 +1841,9 @@ Status LogBlockManager::DeleteBlock(const BlockId& block_id) {
     }
 
     // Return early if deleting a block in a failed directory.
-    set<uint16_t> failed_dirs = dd_manager_->GetFailedDataDirs();
+    set<int> failed_dirs = dd_manager_->GetFailedDataDirs();
     if (PREDICT_FALSE(!failed_dirs.empty())) {
-      uint16_t uuid_idx;
+      int uuid_idx;
       CHECK(dd_manager_->FindUuidIndexByDataDir(lb->container()->data_dir(), &uuid_idx));
       if (ContainsKey(failed_dirs, uuid_idx)) {
         LOG_EVERY_N(INFO, 10) << Substitute("Block $0 is in a failed directory; not deleting",

http://git-wip-us.apache.org/repos/asf/kudu/blob/f96ab36a/src/kudu/tserver/ts_tablet_manager.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tserver/ts_tablet_manager.cc b/src/kudu/tserver/ts_tablet_manager.cc
index 2967fe7..ceb3641 100644
--- a/src/kudu/tserver/ts_tablet_manager.cc
+++ b/src/kudu/tserver/ts_tablet_manager.cc
@@ -1276,7 +1276,7 @@ Status TSTabletManager::DeleteTabletData(
 
 void TSTabletManager::FailTabletsInDataDir(const string& uuid) {
   DataDirManager* dd_manager = fs_manager_->dd_manager();
-  uint16_t uuid_idx;
+  int uuid_idx;
   CHECK(dd_manager->FindUuidIndexByUuid(uuid, &uuid_idx))
       << Substitute("No data directory found with UUID $0", uuid);
   LOG(FATAL) << Substitute("Data directory $0 failed. Disk failure handling not implemented",