diff --git a/.travis.yml b/.travis.yml index f15d6ee3..f6498b92 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,5 +9,7 @@ env: - FOLDER_NAME=src/services/tools/servicesmgmt - FOLDER_NAME=src/services/oauth2 - FOLDER_NAME=src/services/ng/memcached WARDENIZED_SERVICE=true - - FOLDER_NAME=src/services/memcached global: [] +matrix: + allow_failures: + - env: FOLDER_NAME=src/services/ng/memcached WARDENIZED_SERVICE=true diff --git a/jobs/memcached_node/monit b/jobs/memcached_node/monit deleted file mode 100644 index 3accc0eb..00000000 --- a/jobs/memcached_node/monit +++ /dev/null @@ -1,5 +0,0 @@ -check process memcached_node - with pidfile /var/vcap/sys/run/memcached_node/memcached_node.pid - start program "/var/vcap/jobs/memcached_node/bin/memcached_node_ctl start" - stop program "/var/vcap/jobs/memcached_node/bin/memcached_node_ctl stop" - group vcap diff --git a/jobs/memcached_node/spec b/jobs/memcached_node/spec deleted file mode 100644 index dfbc9bfd..00000000 --- a/jobs/memcached_node/spec +++ /dev/null @@ -1,18 +0,0 @@ ---- -name: memcached_node - -templates: - memcached_node_ctl: bin/memcached_node_ctl - memcached_node.yml.erb: config/memcached_node.yml - - syslog_forwarder.conf.erb: config/syslog_forwarder.conf - logrotate.erb: config/logrotate.conf - memcached_logrotate.cron.erb: config/memcached_logrotate.cron - -packages: - - common - - memcached_node - - memcached - - ruby - - sqlite - - syslog_aggregator diff --git a/jobs/memcached_node/templates/logrotate.erb b/jobs/memcached_node/templates/logrotate.erb deleted file mode 100644 index ab37d665..00000000 --- a/jobs/memcached_node/templates/logrotate.erb +++ /dev/null @@ -1,12 +0,0 @@ -<% - rotate = properties.memcached_node.logrotate && properties.memcached_node.logrotate.rotate - size = properties.memcached_node.logrotate && properties.memcached_node.logrotate.size -%> -/var/vcap/data/sys/service-log/*.log /var/vcap/data/sys/service-log/*/*.log /var/vcap/data/sys/service-log/*/*/*.log { - missingok - rotate <%= rotate || 3 %> - compress - delaycompress - copytruncate - size=<%= size || "50k" %> -} diff --git a/jobs/memcached_node/templates/memcached_logrotate.cron.erb b/jobs/memcached_node/templates/memcached_logrotate.cron.erb deleted file mode 100644 index bfbaf695..00000000 --- a/jobs/memcached_node/templates/memcached_logrotate.cron.erb +++ /dev/null @@ -1,2 +0,0 @@ -<% freq_min=properties.memcached_node && properties.memcached_node.logrotate && properties.memcached_node.logrotate.freq_min || 5 %> -*/<%= freq_min %> * * * * test -x /usr/sbin/logrotate && /usr/sbin/logrotate /var/vcap/jobs/memcached_node/config/logrotate.conf >>/var/vcap/sys/log/memcached_node/memcached_logrotate_cron.log 2>&1 diff --git a/jobs/memcached_node/templates/memcached_node.yml.erb b/jobs/memcached_node/templates/memcached_node.yml.erb deleted file mode 100644 index ac806616..00000000 --- a/jobs/memcached_node/templates/memcached_node.yml.erb +++ /dev/null @@ -1,50 +0,0 @@ ---- -<% -service = "memcached" -plan_enabled = properties.service_plans && properties.service_plans.send(service.to_sym) -plan = properties.plan || "free" -plan_conf = plan_enabled && properties.service_plans.send(service.to_sym).send(plan.to_sym).configuration -node = properties.memcached_node -supported_versions = node.supported_versions -default_version = node.default_version -nats_props_name = properties.nats_props || "nats" -nats_props = properties.send(nats_props_name) -nats = "nats://#{nats_props.user}:#{nats_props.password}@#{nats_props.address}:#{nats_props.port}" -%> - -capacity: <%= plan_enabled && plan_conf.capacity || 16 %> -plan: <%= plan %> -local_db: sqlite3:/var/vcap/store/memcached/memcached_node.db -mbus: <%= nats %> -index: <%= spec.index %> -base_dir: /var/vcap/store/memcached/instances - -logging: - level: debug - file: /var/vcap/sys/log/memcached_node/memcached_node.log - <% if properties.syslog_aggregator %> - syslog: vcap.memcached_node - <% end %> - -pid: /var/vcap/sys/run/memcached_node/memcached_node.pid -node_id: <%= "#{service}_node#{'_' + plan if plan != 'free'}_#{spec.index.to_i + 1}" %> -supported_versions: <%= "['#{supported_versions.join("' , '")}']" %> -default_version: <%= "'#{default_version}'"%> - -max_clients: <%= plan_enabled && plan_conf.max_clients || 500 %> -memcached_server_path: /var/vcap/packages/memcached/bin/memcached -port_range: - first: 11000 - last: 25000 - -z_interval: <%= properties.memcached_node.z_interval || 30 %> -memcached_log_dir: /var/vcap/sys/service-log/memcached - -# TODO: max memory allocated to memcached service = capacity * memcached_memory = 16*64 = 1GB -# Putting this to 1GB for testing, this *MUST* be appropriately changed -memcached_memory: <%= properties.memcached_memory || 64 %> - -max_nats_payload: <%= nats_props.max_payload || 1048576 %> -memcached_start_timeout: <%= properties.memcached_node.memcached_start_timeout || 3 %> - -run_as_user: <%= properties.memcached_node.run_as_user || "" %> diff --git a/jobs/memcached_node/templates/memcached_node_ctl b/jobs/memcached_node/templates/memcached_node_ctl deleted file mode 100644 index 821e565a..00000000 --- a/jobs/memcached_node/templates/memcached_node_ctl +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -export PATH=/var/vcap/packages/ruby/bin:$PATH - -RUN_DIR=/var/vcap/sys/run/memcached_node -LOG_DIR=/var/vcap/sys/log/memcached_node -SERV_LOG_DIR=/var/vcap/sys/service-log/memcached -PIDFILE=$RUN_DIR/memcached_node.pid -JOB_DIR=/var/vcap/jobs/memcached_node - -source /var/vcap/packages/common/utils.sh - -case $1 in - - start) - pid_guard $PIDFILE "memcached node" - - mkdir -p $RUN_DIR - mkdir -p $LOG_DIR - mkdir -p $SERV_LOG_DIR - - echo $$ > $PIDFILE - - <% if properties.syslog_aggregator %> - /var/vcap/packages/syslog_aggregator/setup_syslog_forwarder.sh $JOB_DIR/config - <% end %> - - (crontab -l | sed /memcached_logrotate/d; cat /var/vcap/jobs/memcached_node/config/memcached_logrotate.cron) | sed /^$/d | crontab - - exec /var/vcap/packages/memcached_node/services/memcached/bin/memcached_node \ - -c $JOB_DIR/config/memcached_node.yml \ - >>$LOG_DIR/memcached_node.stdout.log \ - 2>>$LOG_DIR/memcached_node.stderr.log - - ;; - - stop) - kill_and_wait $PIDFILE - - crontab -l | sed /memcached_logrotate/d | crontab - - ;; - - *) - echo "Usage: memcached_node_ctl {start|stop}" - - ;; - -esac diff --git a/jobs/memcached_node/templates/syslog_forwarder.conf.erb b/jobs/memcached_node/templates/syslog_forwarder.conf.erb deleted file mode 100644 index 031f2cee..00000000 --- a/jobs/memcached_node/templates/syslog_forwarder.conf.erb +++ /dev/null @@ -1,25 +0,0 @@ -<% if properties.syslog_aggregator %> -$ModLoad imuxsock # local message reception (rsyslog uses a datagram socket) -$MaxMessageSize 4k # default is 2k -$WorkDirectory /var/vcap/sys/rsyslog/buffered # where messages should be buffered on disk - -# Forward vcap messages to the aggregator -# -$ActionResumeRetryCount -1 # Try until the server becomes available -$ActionQueueType LinkedList # Allocate on-demand -$ActionQueueFileName agg_backlog # Spill to disk if queue is full -$ActionQueueMaxDiskSpace 32m # Max size for disk queue -$ActionQueueLowWaterMark 2000 # Num messages. Assuming avg size of 512B, this is 1MiB. -$ActionQueueHighWaterMark 8000 # Num messages. Assuming avg size of 512B, this is 4MiB. (If this is reached, messages will spill to disk until the low watermark is reached). -$ActionQueueTimeoutEnqueue 0 # Discard messages if the queue + disk is full -$ActionQueueSaveOnShutdown on # Save in-memory data to disk if rsyslog shuts down -:programname, startswith, "vcap." @@<%= properties.syslog_aggregator.address %>:<%= properties.syslog_aggregator.port %> - -# Log vcap messages locally, too -#$template VcapComponentLogFile, "/var/log/%programname:6:$%/%programname:6:$%.log" -#$template VcapComponentLogFormat, "%timegenerated% %syslogseverity-text% -- %msg%\n" -#:programname, startswith, "vcap." -?VcapComponentLogFile;VcapComponentLogFormat - -# Prevent them from reaching anywhere else -:programname, startswith, "vcap." ~ -<% end %> \ No newline at end of file diff --git a/packages/memcached_node/packaging b/packages/memcached_node/packaging deleted file mode 100644 index 0537d9cb..00000000 --- a/packages/memcached_node/packaging +++ /dev/null @@ -1,11 +0,0 @@ -# abort script on any command that exit with a non zero value -set -e - -cp -a * ${BOSH_INSTALL_TARGET} - -( - cd ${BOSH_INSTALL_TARGET}/services/memcached - bundle_cmd=/var/vcap/packages/ruby/bin/bundle - $bundle_cmd config build.do_sqlite3 --with-sqlite3-dir=/var/vcap/packages/sqlite - $bundle_cmd install --local --deployment --without=development test -) diff --git a/packages/memcached_node/pre_packaging b/packages/memcached_node/pre_packaging deleted file mode 100644 index b2ae6b6a..00000000 --- a/packages/memcached_node/pre_packaging +++ /dev/null @@ -1,4 +0,0 @@ -set -e - -cd ${BUILD_DIR} -pkg_utils/vendor.sh services/memcached diff --git a/packages/memcached_node/spec b/packages/memcached_node/spec deleted file mode 100644 index c64d458b..00000000 --- a/packages/memcached_node/spec +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: memcached_node -dependencies: -- sqlite -- ruby -files: -- services/memcached/**/* -- pkg_utils/* diff --git a/src/services/memcached/.gitignore b/src/services/memcached/.gitignore deleted file mode 100644 index e2e4a5a4..00000000 --- a/src/services/memcached/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -./configs/* -./databases/* -*.db diff --git a/src/services/memcached/DEPRECATED.txt b/src/services/memcached/DEPRECATED.txt deleted file mode 100644 index 84e39f60..00000000 --- a/src/services/memcached/DEPRECATED.txt +++ /dev/null @@ -1,2 +0,0 @@ -This code is DEPRECATED. Only criticial bugs will be fixed. Please -migrate to the new version in "../ng". diff --git a/src/services/memcached/Gemfile b/src/services/memcached/Gemfile deleted file mode 100644 index 6b5344d4..00000000 --- a/src/services/memcached/Gemfile +++ /dev/null @@ -1,26 +0,0 @@ -source :rubygems - -gem 'eventmachine', :git => 'git://github.com/cloudfoundry/eventmachine.git', :branch => 'release-0.12.11-cf' -gem "em-http-request" -gem "ruby-hmac" -gem "uuidtools" -gem "datamapper", ">= 0.10.2" -gem "dm-sqlite-adapter" -gem "sinatra" -gem "thin" -gem "dalli" - -gem 'vcap_common', :require => ['vcap/common', 'vcap/component'], :git => 'git://github.com/cloudfoundry/vcap-common.git', :ref => '68d86f57fb' -gem 'vcap_logging', :require => ['vcap/logging'], :git => 'git://github.com/cloudfoundry/common.git', :ref => 'b96ec1192' -gem 'vcap_services_base', :git => 'git://github.com/cloudfoundry/vcap-services-base.git', :ref => '7d23207e' -gem 'warden-client', :require => ['warden/client'], :git => 'git://github.com/cloudfoundry/warden.git', :ref => 'fe6cb51' -gem 'warden-protocol', :require => ['warden/protocol'], :git => 'git://github.com/cloudfoundry/warden.git', :ref => 'fe6cb51' - -group :test do - gem "rake" - gem "rspec" - gem "simplecov" - gem "simplecov-rcov" - gem "ci_reporter" -end - diff --git a/src/services/memcached/Gemfile.lock b/src/services/memcached/Gemfile.lock deleted file mode 100644 index 6fd2ef3c..00000000 --- a/src/services/memcached/Gemfile.lock +++ /dev/null @@ -1,227 +0,0 @@ -GIT - remote: git://github.com/cloudfoundry/common.git - revision: b96ec1192d961925d91e17ca3831f8547489d918 - ref: b96ec1192 - specs: - vcap_logging (1.0.2) - rake - -GIT - remote: git://github.com/cloudfoundry/eventmachine.git - revision: 2806c630d8631d5dcf9fb2555f665b829052aabe - branch: release-0.12.11-cf - specs: - eventmachine (0.12.11.cloudfoundry.3) - -GIT - remote: git://github.com/cloudfoundry/vcap-common.git - revision: 68d86f57fb82eb44489ace026b6c95102f050c86 - ref: 68d86f57fb - specs: - vcap_common (2.0.10) - em-http-request (~> 1.0.0.beta3, < 1.0.0.beta4) - eventmachine - httpclient - membrane (~> 0.0.2) - mime-types - multipart-post - nats (~> 0.4.24) - posix-spawn (~> 0.3.6) - thin - yajl-ruby - -GIT - remote: git://github.com/cloudfoundry/vcap-services-base.git - revision: 7d23207ec64990460f7f7c38fb43671957948f4e - ref: 7d23207e - specs: - vcap_services_base (0.1.17) - cf-uaa-lib - curb (~> 0.7.16) - datamapper (~> 1.1.0) - do_sqlite3 (~> 0.10.3) - em-http-request (~> 1.0.0.beta.3) - eventmachine (~> 0.12.11.cloudfoundry.3) - eventmachine_httpserver (~> 0.2.1) - json (~> 1.4.6) - nats (~> 0.4.22.beta.8) - resque (~> 1.20) - resque-status (~> 0.3.2) - ruby-hmac (~> 0.4.0) - rubyzip (~> 0.9.8) - sinatra (~> 1.2.3) - thin (~> 1.3.1) - uuidtools (~> 2.1.2) - vcap_common (>= 1.0.8) - vcap_logging (>= 1.0.2) - warden-client (~> 0.0.7) - warden-protocol (~> 0.0.9) - -GIT - remote: git://github.com/cloudfoundry/warden.git - revision: fe6cb5130388fd3117de9b16e830d45844cf05c9 - ref: fe6cb51 - specs: - warden-client (0.0.7) - warden-protocol - warden-protocol (0.0.9) - beefcake - -GEM - remote: http://rubygems.org/ - specs: - addressable (2.2.8) - bcrypt-ruby (2.1.4) - beefcake (0.3.7) - builder (3.0.0) - cf-uaa-lib (1.3.7) - multi_json - ci_reporter (1.7.0) - builder (>= 2.1.2) - curb (0.7.18) - daemons (1.1.8) - dalli (2.0.5) - data_objects (0.10.8) - addressable (~> 2.1) - datamapper (1.1.0) - dm-aggregates (= 1.1.0) - dm-constraints (= 1.1.0) - dm-core (= 1.1.0) - dm-migrations (= 1.1.0) - dm-serializer (= 1.1.0) - dm-timestamps (= 1.1.0) - dm-transactions (= 1.1.0) - dm-types (= 1.1.0) - dm-validations (= 1.1.0) - diff-lcs (1.1.3) - dm-aggregates (1.1.0) - dm-core (~> 1.1.0) - dm-constraints (1.1.0) - dm-core (~> 1.1.0) - dm-core (1.1.0) - addressable (~> 2.2.4) - dm-do-adapter (1.1.0) - data_objects (~> 0.10.2) - dm-core (~> 1.1.0) - dm-migrations (1.1.0) - dm-core (~> 1.1.0) - dm-serializer (1.1.0) - dm-core (~> 1.1.0) - fastercsv (~> 1.5.4) - json (~> 1.4.6) - dm-sqlite-adapter (1.1.0) - dm-do-adapter (~> 1.1.0) - do_sqlite3 (~> 0.10.2) - dm-timestamps (1.1.0) - dm-core (~> 1.1.0) - dm-transactions (1.1.0) - dm-core (~> 1.1.0) - dm-types (1.1.0) - bcrypt-ruby (~> 2.1.4) - dm-core (~> 1.1.0) - fastercsv (~> 1.5.4) - json (~> 1.4.6) - stringex (~> 1.2.0) - uuidtools (~> 2.1.2) - dm-validations (1.1.0) - dm-core (~> 1.1.0) - do_sqlite3 (0.10.8) - data_objects (= 0.10.8) - em-http-request (1.0.0.beta.3) - addressable (>= 2.2.3) - em-socksify - eventmachine - http_parser.rb (>= 0.5.1) - em-socksify (0.1.0) - eventmachine - eventmachine_httpserver (0.2.1) - fastercsv (1.5.5) - http_parser.rb (0.5.3) - httpclient (2.3.2) - json (1.4.6) - json_pure (1.7.3) - macaddr (1.6.1) - systemu (~> 2.5.0) - membrane (0.0.2) - mime-types (1.21) - multi_json (1.3.6) - multipart-post (1.1.5) - nats (0.4.24) - daemons (>= 1.1.5) - eventmachine (>= 0.12.10) - json_pure (>= 1.7.3) - thin (>= 1.3.1) - posix-spawn (0.3.6) - rack (1.4.1) - rake (0.9.2.2) - redis (3.0.3) - redis-namespace (1.2.1) - redis (~> 3.0.0) - redisk (0.2.2) - redis (>= 0.1.1) - redis-namespace (>= 0.1.0) - resque (1.23.1) - multi_json (~> 1.0) - redis-namespace (~> 1.0) - sinatra (>= 0.9.2) - vegas (~> 0.1.2) - resque-status (0.3.3) - redisk (>= 0.2.1) - resque (~> 1.19) - uuid (~> 2.3) - rspec (2.10.0) - rspec-core (~> 2.10.0) - rspec-expectations (~> 2.10.0) - rspec-mocks (~> 2.10.0) - rspec-core (2.10.1) - rspec-expectations (2.10.0) - diff-lcs (~> 1.1.3) - rspec-mocks (2.10.1) - ruby-hmac (0.4.0) - rubyzip (0.9.9) - simplecov (0.6.4) - multi_json (~> 1.0) - simplecov-html (~> 0.5.3) - simplecov-html (0.5.3) - simplecov-rcov (0.2.3) - simplecov (>= 0.4.1) - sinatra (1.2.8) - rack (~> 1.1) - tilt (>= 1.2.2, < 2.0) - stringex (1.2.2) - systemu (2.5.2) - thin (1.3.1) - daemons (>= 1.0.9) - eventmachine (>= 0.12.6) - rack (>= 1.0.0) - tilt (1.3.3) - uuid (2.3.7) - macaddr (~> 1.0) - uuidtools (2.1.3) - vegas (0.1.11) - rack (>= 1.0.0) - yajl-ruby (1.1.0) - -PLATFORMS - ruby - -DEPENDENCIES - ci_reporter - dalli - datamapper (>= 0.10.2) - dm-sqlite-adapter - em-http-request - eventmachine! - rake - rspec - ruby-hmac - simplecov - simplecov-rcov - sinatra - thin - uuidtools - vcap_common! - vcap_logging! - vcap_services_base! - warden-client! - warden-protocol! diff --git a/src/services/memcached/Rakefile b/src/services/memcached/Rakefile deleted file mode 100644 index 649cb293..00000000 --- a/src/services/memcached/Rakefile +++ /dev/null @@ -1,56 +0,0 @@ -require 'rake' -require 'yaml' -require 'yajl' - -task "default" => "spec" - -desc "Run specs" -task "spec" => ["test:spec"] - -desc "Run specs using SimpleCov" -task "spec:rcov" => ["test:spec:rcov"] - -desc "Run ci using SimpleCov" -task "spec:ci" => ["test:spec:ci"] - -namespace "bundler" do - desc "Install gems" - task "install" do - sh("bundle install") - end - - desc "Install gems for test" - task "install:test" do - sh("bundle install --without development production") - end - - desc "Install gems for production" - task "install:production" do - sh("bundle install --without development test") - end - - desc "Install gems for development" - task "install:development" do - sh("bundle install --without test production") - end -end - -namespace "test" do - def run_spec - sh "nats-server &" - Dir.chdir("spec"){ yield } - sh "pkill -f nats-server" - end - - task "spec" do |t| - run_spec{ sh "rake spec" } - end - - task "spec:rcov" do |t| - run_spec{ sh "rake simcov" } - end - - task "spec:ci" do |t| - run_spec{ sh "rake spec:ci" } - end -end diff --git a/src/services/memcached/TODO b/src/services/memcached/TODO deleted file mode 100644 index 6f637edb..00000000 --- a/src/services/memcached/TODO +++ /dev/null @@ -1,13 +0,0 @@ -TODO: Memcached As A Service: ----------------------------- - -1. Sandboxing of memcached processes when deployed on a multi-user / multi-tenant scenario - - Currently, the memccached process runs on some port when the MaaS is provisioned (say for user u1). If - another user (u2) has his MaaS instance provisioned on the same node, there is a likely hood that u2 might - be able to port scan and connect to u1's memcached instance therby polluting u1's cache. - - - Possible solution: Use c-groups/warden sandboxing to isolate each MaaS instance completely - -2. Varz / healtz details need to be updated to be relevant reporting parameters - -3. Make other aspects of memcached configurable (such as memory/instance), add support for non-free plans. diff --git a/src/services/memcached/bin/memcached_gateway b/src/services/memcached/bin/memcached_gateway deleted file mode 100755 index 6e7fd494..00000000 --- a/src/services/memcached/bin/memcached_gateway +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env ruby -# -*- mode: ruby -*- -# Copyright (c) 2009-2011 VMware, Inc. -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__) -require "bundler/setup" -require "vcap_services_base" - -$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib') -require 'memcached_service/memcached_provisioner' - -class VCAP::Services::Memcached::Gateway < VCAP::Services::Base::Gateway - - def provisioner_class - VCAP::Services::Memcached::Provisioner - end - - def default_config_file - config_base_dir = ENV["CLOUD_FOUNDRY_CONFIG_PATH"] || File.join(File.dirname(__FILE__), '..', 'config') - File.join(config_base_dir, 'memcached_gateway.yml') - end - -end - -VCAP::Services::Memcached::Gateway.new.start diff --git a/src/services/memcached/bin/memcached_node b/src/services/memcached/bin/memcached_node deleted file mode 100755 index ffd40ceb..00000000 --- a/src/services/memcached/bin/memcached_node +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env ruby -# -*- mode: ruby -*- -# Copyright (c) 2009-2011 VMware, Inc. - -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__) -require "bundler/setup" -require "vcap_services_base" - -$LOAD_PATH.unshift(File.expand_path("../../lib", __FILE__)) -require "memcached_service/memcached_node" - -class VCAP::Services::Memcached::NodeBin < VCAP::Services::Base::NodeBin - - def node_class - VCAP::Services::Memcached::Node - end - - def default_config_file - config_base_dir = ENV["CLOUD_FOUNDRY_CONFIG_PATH"] || File.join(File.dirname(__FILE__), '..', 'config') - File.join(config_base_dir, 'memcached_node.yml') - end - - def additional_config(options, config) - options[:memcached_server_path] = parse_property(config, "memcached_server_path", String) - options[:port_range] = parse_property(config, "port_range", Range) - options[:memcached_log_dir] = parse_property(config, "memcached_log_dir", String) - options[:max_clients] = parse_property(config, "max_clients", Integer, :optional => true) - options[:memcached_memory] = parse_property(config, "memcached_memory", Integer) - options[:sasl_enabled] = parse_property(config, "sasl_enabled", Boolean, :optional => true) - options[:run_as_user] = parse_property(config, "run_as_user", String, :optional => true) - options - end - -end - -VCAP::Services::Memcached::NodeBin.new.start diff --git a/src/services/memcached/config/memcached_gateway.yml b/src/services/memcached/config/memcached_gateway.yml deleted file mode 100644 index 636b3f0e..00000000 --- a/src/services/memcached/config/memcached_gateway.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -cloud_controller_uri: http://api.vcap.me -service: - name: memcached - version: "1.4" - description: 'Memcached in-memory object cache service' - plans: ['free'] - default_plan: free - tags: ['memcached', 'memcached-1.4', 'key-value', 'nosql'] -ip_route: localhost -index: 0 -token: changememcachedtoken -logging: - level: debug -mbus: nats://localhost:4222/ -pid: /var/vcap/sys/run/memcached_service.pid -# z_interval: 30 diff --git a/src/services/memcached/config/memcached_node.yml b/src/services/memcached/config/memcached_node.yml deleted file mode 100644 index 3bb4ff97..00000000 --- a/src/services/memcached/config/memcached_node.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -plan: free -local_db: sqlite3:/var/vcap/services/memcached/memcached_node.db -mbus: nats://localhost:4222/ -index: 0 -base_dir: /var/vcap/services/memcached/instances -logging: - level: debug -pid: /var/vcap/sys/run/memcached_node.pid -capacity: 50 -node_id: memcached_node_1 -memcached_server_path: memcached -memcached_memory: 16 -port_range: - first: 5000 - last: 25000 -memcached_log_dir: /var/vcap/sys/log/memcached -max_clients: 500 -memcached_timeout: 2 -sasl_enabled: false - -# z_interval: 30 diff --git a/src/services/memcached/lib/memcached_service/common.rb b/src/services/memcached/lib/memcached_service/common.rb deleted file mode 100644 index 7ee2f0d7..00000000 --- a/src/services/memcached/lib/memcached_service/common.rb +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -# This code is based on Redis as a Service. - -module VCAP - module Services - module Memcached - module Common - def service_name - "MemcachedaaS" - end - end - end - end -end diff --git a/src/services/memcached/lib/memcached_service/memcached_error.rb b/src/services/memcached/lib/memcached_service/memcached_error.rb deleted file mode 100644 index a945bafa..00000000 --- a/src/services/memcached/lib/memcached_service/memcached_error.rb +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -# This code is based on Redis as a Service. - -module VCAP - module Services - module Memcached - class MemcachedError < VCAP::Services::Base::Error::ServiceError - # 31200 - 31299 Memcached-specific Error - MEMCACHED_SAVE_INSTANCE_FAILED = [31200, HTTP_INTERNAL, "Could not save instance: %s"] - MEMCACHED_DESTROY_INSTANCE_FAILED = [31201, HTTP_INTERNAL, "Could not destroy instance: %s"] - MEMCACHED_FIND_INSTANCE_FAILED = [31202, HTTP_NOT_FOUND, "Could not find instance: %s"] - MEMCACHED_START_INSTANCE_FAILED = [31203, HTTP_INTERNAL, "Could not start instance: %s"] - MEMCACHED_CLEANUP_INSTANCE_FAILED = [31204, HTTP_INTERNAL, "Could not cleanup instance, the reasons: %s"] - MEMCACHED_CONNECT_INSTANCE_FAILED = [31205, HTTP_INTERNAL, "Could not connect memcached instance"] - MEMCACHED_SET_INSTANCE_PASS_FAILED = [31206, HTTP_INTERNAL, "Could not set memcached instance password"] - MEMCACHED_RESTORE_FILE_NOT_FOUND = [31207, HTTP_INTERNAL, "Could not find memcached restore data file %s"] - end - end - end -end diff --git a/src/services/memcached/lib/memcached_service/memcached_node.rb b/src/services/memcached/lib/memcached_service/memcached_node.rb deleted file mode 100644 index 04e3254c..00000000 --- a/src/services/memcached/lib/memcached_service/memcached_node.rb +++ /dev/null @@ -1,423 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -# This code is based on Redis as a Service. - -require "erb" -require "fileutils" -require "logger" - -require "uuidtools" -require 'dalli' -require "thread" - -module VCAP - module Services - module Memcached - class Node < VCAP::Services::Base::Node - end - end - end -end - -require "memcached_service/common" -require "memcached_service/memcached_error" - -class VCAP::Services::Memcached::Node - - include VCAP::Services::Memcached::Common - include VCAP::Services::Memcached - - class SASLAdmin - class SASLOperationError < StandardError - SASL_OPS_USER_ALREADY_EXISTS = 'Failed to create user. Specified user has already exists.' - SASL_OPS_ILLEGAL_INPUT = 'Illegal input.' - SASL_OPS_UNKNOWN_ERROR = 'Failed to create user. Unknown error.' - end - - def initialize(logger) - @logger = logger - end - - def user_list - list_str = `sasldblistusers2`.split - list_str.delete('userPassword') - users = list_str.map do |e| - separator = e.index('@') - 1 - e.slice(0..separator) - end - - return users - end - - def create_user(user, password) - if user.nil? || user.empty? - raise SASLOperationError::SASL_OPS_ILLEGAL_INPUT - end - - users = user_list() - - if users.include?(user) - raise SASLOperationError::SASL_OPS_USER_ALREADY_EXISTS - end - ret = `echo '#{password}' | saslpasswd2 -a memcached -c #{user} -p` - - if ret == '' - return true - end - - raise SASLOperationError::SASL_OPS_UNKNOWN_ERROR - end - - def delete_user(user) - if user.nil? || user.empty? - raise SASLOperationError::SASL_OPS_ILLEGAL_INPUT - end - - ret = `saslpasswd2 -d #{user}` - end - end - - class ProvisionedService - include DataMapper::Resource - property :name, String, :key => true - property :port, Integer, :unique => true - property :user, String, :required => true - property :password, String, :required => true - property :plan, Enum[:free], :required => true - property :pid, Integer - - def listening? - begin - TCPSocket.open('localhost', port).close - return true - rescue => e - return false - end - end - - def running? - VCAP.process_running? pid - end - end - - attr_accessor :local_db - - def initialize(options) - super(options) - - @logger.warn("local_ip: #{@local_ip}") - @sasl_admin = SASLAdmin.new(@logger) - @base_dir = options[:base_dir] - FileUtils.mkdir_p(@base_dir) - @memcached_server_path = options[:memcached_server_path] - @available_capacity = options[:capacity] - @local_db = options[:local_db] - @free_ports = Set.new - @free_ports_mutex = Mutex.new - options[:port_range].each {|port| @free_ports << port} - @memcached_log_dir = options[:memcached_log_dir] - @max_clients = @options[:max_clients] || 500 - @memcached_timeout = @options[:memcached_timeout] || 2 - @memcached_memory = @options[:memcached_memory] - @sasl_enabled = @options[:sasl_enabled] || false - @run_as_user = @options[:run_as_user] || "" - @supported_versions =["1.4"] - end - - def pre_send_announcement - super - start_db - start_provisioned_instances - end - - def start_db - DataMapper.setup(:default, @local_db) - DataMapper::auto_upgrade! - end - - def shutdown - super - ProvisionedService.all.each do |instance| - stop_memcached_server(instance) - end - true - end - - def announcement - @capacity_lock.synchronize do - a = { - :available_capacity => @capacity, - :capacity_unit => capacity_unit - } - end - end - - def provision(plan, credentials = nil, version=nil) - instance = ProvisionedService.new - instance.plan = plan - if credentials - instance.name = credentials["name"] - @free_ports_mutex.synchronize do - if @free_ports.include?(credentials["port"]) - @free_ports.delete(credentials["port"]) - instance.port = credentials["port"] - else - port = @free_ports.first - @free_ports.delete(port) - instance.port = port - end - end - instance.user = credentials["user"] - instance.password = credentials["password"] - else - @free_ports_mutex.synchronize do - port = @free_ports.first - @free_ports.delete(port) - instance.port = port - end - instance.name = UUIDTools::UUID.random_create.to_s - instance.user = UUIDTools::UUID.random_create.to_s - instance.password = UUIDTools::UUID.random_create.to_s - end - - begin - instance.pid = start_instance(instance) - @sasl_admin.create_user(instance.user, instance.password) if @sasl_enabled - save_instance(instance) - @logger.debug("Started process #{instance.pid}") - rescue => e1 - begin - cleanup_instance(instance) - rescue => e2 - # Ignore the rollback exception - end - raise e1 - end - - # Sleep 1 second to wait for memcached instance start - sleep 1 - gen_credentials(instance) - end - - def unprovision(instance_id, credentials_list = []) - instance = get_instance(instance_id) - @logger.info("unprovision instance: #{instance.to_s}") - cleanup_instance(instance) - {} - end - - def bind(instance_id, binding_options = :all, credentials = nil) - # Memcached has no user level security, just return provisioned credentials. - instance = nil - if credentials - instance = get_instance(credentials["name"]) - else - instance = get_instance(instance_id) - end - gen_credentials(instance) - end - - def unbind(credentials) - # Memcached has no user level security, so has no operation for unbinding. - {} - end - - def restore(instance_id, backup_dir) - # No restore command for memcached - raise MemcachedError.new(MemcachedError::MEMCACHED_RESTORE_FILE_NOT_FOUND, dump_file) - {} - end - - def varz_details - varz = {} - varz[:provisioned_instances] = [] - varz[:provisioned_instances_num] = 0 - @capacity_lock.synchronize do - varz[:max_instances_num] = @options[:capacity] / capacity_unit - end - ProvisionedService.all.each do |instance| - varz[:provisioned_instances] << get_varz(instance) - varz[:provisioned_instances_num] += 1 - end - varz - rescue => e - @logger.warn("Error while getting varz details: #{e}") - {} - end - - def start_provisioned_instances - @logger.debug("Start provisioned instance....") - - ProvisionedService.all.each do |instance| - @capacity -= capacity_unit - @logger.debug("instance : #{instance.inspect}") - @free_ports_mutex.synchronize do - @free_ports.delete(instance.port) - end - if instance.listening? - @logger.warn("Service #{instance.name} already running on port #{instance.port}") - next - end - begin - pid = start_instance(instance) - instance.pid = pid - @logger.debug("Started Instace. pid is #{instance.pid}") - @sasl_admin.create_user(instance.user, instance.password) if @sasl_enabled - save_instance(instance) - rescue => e - @logger.warn("Error starting instance #{instance.name}: #{e}") - begin - cleanup_instance(instance) - rescue => e2 - # Ignore the rollback exception - end - end - end - - @logger.debug("Started provisined instances.") - end - - def save_instance(instance) - raise MemcachedError.new(MemcachedError::MEMCACHED_SAVE_INSTANCE_FAILED, instance.inspect) unless instance.save - end - - def destroy_instance(instance) - raise MemcachedError.new(MemcachedError::MEMCACHED_DESTROY_INSTANCE_FAILED, instance.inspect) unless instance.destroy - end - - def get_instance(name) - instance = ProvisionedService.get(name) - raise MemcachedError.new(MemcachedError::MEMCACHED_FIND_INSTANCE_FAILED, name) if instance.nil? - instance - end - - def build_option_string(opt) - # ./memcached -m memory_size -p port_num -c connection -P pid_file -t -v -S - str = '' - str << " -m #{opt['memory']}" - str << " -p #{opt['port']}" - str << " -c #{opt['maxclients']}" - str << " -v" - str << " -S" if @sasl_enabled - - return str - end - - def start_instance(instance) - @logger.debug("Starting: #{instance.inspect}") - - opt = {} - opt['memory'] = @memcached_memory - opt['port'] = instance.port - opt['password'] = instance.password - opt['name'] = instance.name - opt['maxclients'] = @max_clients - - option_string = build_option_string(opt) - - log_dir = instance_log_dir(instance.name) - log_file = File.join(log_dir, "memcached.log") - err_file = File.join(log_dir, "memcached.err.log") - - FileUtils.mkdir_p(log_dir) - - run_as_cmd_prefix = @run_as_user.empty? ? "" : "sudo -u #{@run_as_user}" - cmd = "#{run_as_cmd_prefix} #{@memcached_server_path} #{option_string}" - @logger.info("Executing CMD = #{cmd}") - - pid = Process.spawn(cmd, :out=>"#{log_file}", :err=>"#{err_file}") - Process.detach(pid) - return pid - rescue => e - raise MemcachedError.new(MemcachedError::MEMCACHED_START_INSTANCE_FAILED, instance.inspect) - end - - def stop_instance(instance) - @logger.debug("Stop instance: #{instance.inspect}") - stop_memcached_server(instance) - end - - def cleanup_instance(instance) - err_msg = [] - begin - stop_instance(instance) if instance.running? - rescue => e - err_msg << e.message - end - @free_ports_mutex.synchronize do - @free_ports.add(instance.port) - end - begin - destroy_instance(instance) - @sasl_admin.delete_user(instance.user) if @sasl_enabled - rescue => e - err_msg << e.message - end - raise MemcachedError.new(MemcachedError::MEMCACHED_CLEANUP_INSTANCE_FAILED, err_msg.inspect) if err_msg.size > 0 - end - - def stop_memcached_server(instance) - @logger.debug("stop process #{instance.pid}") - - Timeout::timeout(@memcached_timeout) do - Process.kill("KILL", instance.pid.to_i) - end - rescue Timeout::Error => e - @logger.warn(e) - rescue => e - @logger.warn(e) - end - - def get_info(instance) - user = instance.user - password = instance.password - hostname = 'localhost:' + instance.port.to_s - info = nil - Timeout::timeout(@memcached_timeout) do - memcached = Dalli::Client.new(hostname, username: user, password: password) - info = memcached.stats - end - rescue => e - raise MemcachedError.new(MemcachedError::MEMCACHED_CONNECT_INSTANCE_FAILED) - ensure - begin - memcached.close if memcached - return info[info.keys.first] - rescue => e - end - end - - def get_varz(instance) - info = get_info(instance) - varz = {} - varz[:name] = instance.name - varz[:port] = instance.port - varz[:plan] = @plan - varz[:usage] = {} - varz[:usage][:capacity_unit] = capacity_unit - varz[:usage][:max_clients] = @max_clients - - varz[:info] = info - varz - end - - def gen_credentials(instance) - @logger.warn("local_ip: #{@local_ip}") - credentials = { - "hostname" => @local_ip, - "host" => @local_ip, - "port" => instance.port, - "user" => instance.user, - "password" => instance.password, - "name" => instance.name - } - end - - - def instance_dir(instance_id) - File.join(@base_dir, instance_id) - end - - def instance_log_dir(instance_id) - File.join(@memcached_log_dir, instance_id) - end -end diff --git a/src/services/memcached/lib/memcached_service/memcached_provisioner.rb b/src/services/memcached/lib/memcached_service/memcached_provisioner.rb deleted file mode 100644 index eaaa1f99..00000000 --- a/src/services/memcached/lib/memcached_service/memcached_provisioner.rb +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -# This code is based on Redis as a Service. - -require 'memcached_service/common' - -class VCAP::Services::Memcached::Provisioner < VCAP::Services::Base::Provisioner - - include VCAP::Services::Memcached::Common -end diff --git a/src/services/memcached/spec/Rakefile b/src/services/memcached/spec/Rakefile deleted file mode 100644 index 8143b1e7..00000000 --- a/src/services/memcached/spec/Rakefile +++ /dev/null @@ -1,49 +0,0 @@ -require 'rake' -require 'tempfile' - -require 'rubygems' -require 'bundler/setup' -Bundler.require(:default, :test) - -require 'rspec' -require 'rspec/core/rake_task' -require 'ci/reporter/rake/rspec' - -require "simplecov" -require "simplecov-rcov" - -coverage_dir = File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_coverage")) -reports_dir = File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_reports")) - -ENV['CI_REPORTS'] = reports_dir - -desc "Run specs using SimpleCov" -task "spec:ci" => ["ci:setup:rspec", "simcov"] - -RSpec::Core::RakeTask.new do |t| - t.pattern = "**/*_spec.rb" - t.rspec_opts = ["--format", "documentation", "--colour"] -end - -desc "Run spec with coverage" -task "simcov" => "cleanup_coverage" do - class SimpleCov::Formatter::CombinedFormatter - def format(result) - SimpleCov::Formatter::RcovFormatter.new.format(result) - end - end - - SimpleCov.formatter = SimpleCov::Formatter::CombinedFormatter - SimpleCov.root('..') - SimpleCov.coverage_dir('spec_coverage') - SimpleCov.start do - add_filter "/spec/" - spec_dir = File.expand_path("..", __FILE__) - Rspec::Core::Runner.disable_autorun! - Rspec::Core::Runner.run([spec_dir], STDERR, STDOUT) - end -end - -task "cleanup_coverage" do - rm_rf coverage_dir -end diff --git a/src/services/memcached/spec/node_spec.rb b/src/services/memcached/spec/node_spec.rb deleted file mode 100644 index ba1644f7..00000000 --- a/src/services/memcached/spec/node_spec.rb +++ /dev/null @@ -1,436 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -# This code is based on Redis as a Service. - -require "spec_helper" -require "memcached_service/memcached_node" -require "memcached_service/memcached_error" -require "dalli" - -module VCAP - module Services - module Memcached - class Node - attr_reader :base_dir, :memcached_server_path, :local_ip, :capacity, :node_id, :config_template, :free_ports, :memcached_timeout - attr_accessor :logger, :local_db - end - end - end -end - -describe VCAP::Services::Memcached::Node do - - before :all do - @capacity_unit = 1 - @options = get_node_config() - @logger = @options[:logger] - @local_db_file = @options[:local_db_file] - FileUtils.mkdir_p(@options[:base_dir]) - FileUtils.mkdir_p(@options[:memcached_log_dir]) - - EM.run do - @node = VCAP::Services::Memcached::Node.new(@options) - EM.add_timer(0.1) {EM.stop} - end - end - - before :each do - @instance = VCAP::Services::Memcached::Node::ProvisionedService.new - @instance.name = UUIDTools::UUID.random_create.to_s - @instance.user = UUIDTools::UUID.random_create.to_s - @instance.port = VCAP.grab_ephemeral_port - @instance.plan = :free - @instance.password = UUIDTools::UUID.random_create.to_s - end - - after :all do - FileUtils.rm_f(@local_db_file) - FileUtils.rm_rf(@options[:base_dir]) - FileUtils.rm_rf(@options[:memcached_log_dir]) - end - -# describe 'SASLAdmin' do -# before :all do -# @admin = VCAP::Services::Memcached::Node::SASLAdmin.new(@logger) -# @create_user = 'username' -# @password = 'password' -# end -# -# it "should create new user" do -# @admin.create_user(@create_user, @password) -# end -# -# it "should delete specified user" do -# @admin.delete_user(@create_user) -# end -# end - - describe 'Node.initialize' do - it "should set up a base directory" do - @node.base_dir.should be @options[:base_dir] - end - - it "should set up a memcached server path" do - @node.memcached_server_path.should be @options[:memcached_server_path] - end - - it "should set up a local IP" do - @node.local_ip.should be - end - - it "should set up an available capacity" do - @node.capacity.should == @options[:capacity] - end - - it "should setup a free port set" do - @node.free_ports.should be - end - end - - describe "Node.start_db" do - it "should fail when set local db with non-existing file argument" do - @node.local_db = "sqlite3:/non_existing/non-existing.db" - thrown = nil - begin - @node.start_db - rescue => e - thrown = e - end - thrown.should be - thrown.class.should == DataObjects::ConnectionError - @node.local_db = @options[:local_db] - end - - it "should setup local db with right arguments" do - @node.start_db.should be - end - end - - describe 'Node.start_provisioned_instances' do - it "should check whether provisioned instance is running or not" do - @logger.debug("test : start instance #{@instance.inspect}") - @instance.pid = @node.start_instance(@instance) - sleep 2 - @instance.running?.should == true - @logger.debug("test : stop instance #{@instance.inspect}") - @node.stop_instance(@instance) - sleep 2 - @instance.running?.should == false - end - - it "should start a new instance if the instance is not started when start all provisioned instances" do - @instance.pid = @node.start_instance(@instance) - @node.save_instance(@instance) - @node.stop_instance(@instance) - sleep 1 - @node.start_provisioned_instances - sleep 1 - instance = VCAP::Services::Memcached::Node::ProvisionedService.get(@instance.name) - p instance - instance.pid.should_not == @instance.pid - @node.stop_instance(@instance) - @instance.destroy - end - end - - describe 'Node.announcement' do - it "should send node announcement" do - @node.announcement.should be - end - - it "should send available_capacity in announce message" do - @node.announcement[:available_capacity].should == @node.capacity - end - end - - describe "Node.provision" do - before :all do - @credentials = @node.provision(:free) - sleep 1 - end - - after :all do - @node.unprovision(@credentials["name"]) - end - - it "should access the instance using the credentials returned by successful provision" do - hostname, username, password = get_connect_info(@credentials) - memcached = Dalli::Client.new(hostname, username: username, password: password) - memcached.get("test_key").should be_nil - end - -# - These tests require sasl to be enabled, commenting them out for now if later on we decide -# to enable sasl -# it "should not allow null credentials to access the instance" do -# hostname = get_hostname(@credentials) -# memcached = Dalli::Client.new(hostname) -# expect {memcached.get("test_key")}.should raise_error(RuntimeError) -# end - -# it "should not allow wrong credentials to access the instance" do -# hostname, username, password = get_connect_info(@credentials) -# memcached = Dalli::Client.new(hostname, username: username, password: 'wrong_password') -# expect {memcached.get("test_key")}.should raise_error(RuntimeError) -# end - - it "should delete the provisioned instance port in free port list when finish a provision" do - @node.free_ports.include?(@credentials["port"]).should == false - end - - it "should send provision message when finish a provision" do - @credentials["hostname"].should be - @credentials["host"].should == @credentials["hostname"] - @credentials["port"].should be - @credentials["password"].should be - @credentials["name"].should be - end - - it "should provision from specified credentials" do - in_credentials = {} - in_credentials["name"] = UUIDTools::UUID.random_create.to_s - in_credentials["port"] = 22222 - in_credentials["user"] = UUIDTools::UUID.random_create.to_s - in_credentials["password"] = UUIDTools::UUID.random_create.to_s - out_credentials = @node.provision(:free, in_credentials) - sleep 1 - out_credentials["name"].should == in_credentials["name"] - out_credentials["port"].should == in_credentials["port"] - out_credentials["password"].should == in_credentials["password"] - @node.unprovision(out_credentials["name"]) - end - end - - describe "Node.unprovision" do - before :all do - @credentials = @node.provision(:free) - sleep 2 - @node.unprovision(@credentials["name"]) - end - - it "should not access the instance when doing unprovision" do - p @credentials - hostname, username, password = get_connect_info(@credentials) - memcached = Dalli::Client.new(hostname, username: username, password: password) - expect {memcached.get("test_key")}.should raise_error(Dalli::DalliError) - end - - it "should add the provisioned instance port in free port list when finish an unprovision" do - @node.free_ports.include?(@credentials["port"]).should == true - end - - it "should raise exception when unprovision an non-existed name" do - expect {@node.unprovision("non-existed")}.should raise_error(VCAP::Services::Memcached::MemcachedError) - end - end - - describe "Node.save_instance" do - it "should raise exception when save instance failed" do - @instance.pid = 100 - @instance.persisted_state = DataMapper::Resource::State::Immutable - expect {@node.save_instance(@instance)}.should raise_error(VCAP::Services::Memcached::MemcachedError) - end - end - - describe "Node.destory_instance" do - it "should raise exception when destroy instance failed" do - instance = VCAP::Services::Memcached::Node::ProvisionedService.new - expect {@node.destroy_instance(instance)}.should raise_error(VCAP::Services::Memcached::MemcachedError) - end - end - - describe "Node.get_instance" do - it "should raise exception when get instance failed" do - expect {@node.get_instance("non-existed")}.should raise_error(VCAP::Services::Memcached::MemcachedError) - end - end - - describe "Node.bind" do - before :all do - @instance_credentials = @node.provision(:free) - sleep 1 - @binding_credentials = @node.bind(@instance_credentials["name"]) - sleep 1 - end - - after :all do - @node.unbind(@binding_credentials) - sleep 1 - @node.unprovision(@instance_credentials["name"]) - end - - it "should access memcached server using the returned credential" do - hostname = get_hostname(@binding_credentials) - username = @binding_credentials['user'] - password = @binding_credentials['password'] - memcached = Dalli::Client.new(hostname, username: username, password: password) - memcached.get("test_key").should be_nil - end - -# - These tests require sasl to be enabled, commenting them out for now if later on we decide -# to enable sasl -# it "should not allow null credentials to access the instance" do -# hostname = get_hostname(@binding_credentials) -# memcached = Dalli::Client.new(hostname) -# expect {memcached.get("test_key")}.should raise_error(RuntimeError) -# end - -# it "should not allow wrong credentials to access the instance" do -# hostname = get_hostname(@binding_credentials) -# username = @binding_credentials['user'] -# password = @binding_credentials['password'] -# memcached = Dalli::Client.new(hostname, username: username, password: 'wrong_password') -# expect {memcached.get("test_key")}.should raise_error(RuntimeError) -# end - - it "should send binding message when finish a binding" do - @binding_credentials["hostname"].should be - @binding_credentials["host"].should == @binding_credentials["hostname"] - @binding_credentials["port"].should be - @binding_credentials["password"].should be - @binding_credentials["name"].should be - end - end - - describe "Node.unbind" do - it "should return true when finish an unbinding" do - @instance_credentials = @node.provision(:free) - sleep 1 - @binding_credentials = @node.bind(@instance_credentials["name"]) - sleep 1 - @node.unbind(@binding_credentials).should == {} - @node.unprovision(@instance_credentials["name"]) - end - end - - describe "Node.varz_details" do - it "should report varz details" do - @credentials = @node.provision(:free) - sleep 1 - varz = @node.varz_details - varz[:provisioned_instances_num].should == 1 - varz[:max_instances_num].should == @options[:capacity] / @capacity_unit - varz[:provisioned_instances][0][:name].should == @credentials["name"] - varz[:provisioned_instances][0][:port].should == @credentials["port"] - varz[:provisioned_instances][0][:plan].should == "free" - @node.unprovision(@credentials["name"]) - end - end - - describe "Node.max_clients" do - it "should limit the maximum number of clients" do - @credentials = @node.provision(:free) - sleep 1 - memcached = [] - # Create max_clients connections - hostname, username, password = get_connect_info(@credentials) - for i in 1..(@options[:max_clients]-30) - memcached[i] = Dalli::Client.new(hostname, username: username, password: password) - memcached[i].set("foo", 1) - end - - # The max_clients + 1 connection will raise exception - expect do - Dalli::Client.new(hostname, username: username, password: password).set("foo", 1) - end.should raise_error(Dalli::RingError) - # Close the max_clients connections - for i in 1..(@options[:max_clients] - 30) - memcached[i].close - end - # Now the new connection will be successful - new_memcached = Dalli::Client.new(hostname, username: username, password: password) - new_memcached.set('foo', 1) - @node.unprovision(@credentials["name"]) - end - end - - describe "Node.timeout" do - it "should raise exception when memcached client response time is too long" do - credentials = @node.provision(:free) - instance = @node.get_instance(credentials["name"]) - sleep 1 - class Dalli::Client - alias :old_stats :stats - def stats(cmd = nil) - sleep 3 - old_stats(cmd) - end - end - expect {@node.get_info(instance)}.should raise_error(VCAP::Services::Memcached::MemcachedError) - class Dalli::Client - alias :stats :old_stats - end - @node.get_info(instance).should be - @node.unprovision(credentials["name"]) - end - end - - # TODO: This test should be ideally for the base class... -=begin - describe "Node.thread_safe" do - it "should be thread safe in multi-threads call" do - old_capacity = @node.available_capacity - old_ports = @node.free_ports.clone - semaphore = Mutex.new - credentials_list = [] - threads_num = 10 - somethreads = (1..threads_num).collect do - Thread.new do - semaphore.synchronize do - credentials_list << @node.provision(:free) - end - end - end - somethreads.each {|t| t.join} - sleep 2 - new_capacity = @node.available_capacity - new_ports = @node.free_ports.clone - (old_capacity - new_capacity).should == threads_num * @capacity_unit - delta_ports = Set.new - credentials_list.each do |credentials| - delta_ports << credentials["port"] - end - (old_ports - new_ports).should == delta_ports - VCAP::Services::Memcached::Node::ProvisionedService.all.size.should == threads_num - somethreads = (1..threads_num).collect do |i| - Thread.new do - @node.unprovision(credentials_list[i - 1]["name"]) - end - end - somethreads.each {|t| t.join} - @node.free_ports.should == old_ports - @node.available_capacity.should == old_capacity - VCAP::Services::Memcached::Node::ProvisionedService.all.size.should == 0 - end - end -=end - - describe "Node.restart" do - it "should still use the provisioned service after the restart" do - begin - EM.run do - credentials = @node.provision(:free) - @node.shutdown - @node = VCAP::Services::Memcached::Node.new(@options) - @node.get_instance(credentials).should_not == nil - EM.add_timer(1) { - memcached = Dalli::Client.new(hostname, username: username, password: password) - memcached.stats - - @node.unprovision(credentials["name"]) - EM.stop - } - end - rescue SystemExit => err - end - end - end - - describe "Node.shutdown" do - it "should return true when shutdown finished" do - EM.run do - @node.shutdown.should be - EM.add_timer(0.1) {EM.stop} - end - end - end - -end diff --git a/src/services/memcached/spec/provisioner_spec.rb b/src/services/memcached/spec/provisioner_spec.rb deleted file mode 100644 index bd64a578..00000000 --- a/src/services/memcached/spec/provisioner_spec.rb +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -# This code is based on Redis as a Service. - -require File.dirname(__FILE__) + '/spec_helper' - -require 'memcached_service/memcached_provisioner' - -describe VCAP::Services::Memcached::Provisioner do - before :all do - logger = Logger.new(STDOUT, "daily") - logger.level = Logger::DEBUG - EM.run do - @provisioner = VCAP::Services::Memcached::Provisioner.new({:logger => logger}) - EM.add_timer(1) {EM.stop} - end - end - - describe 'Provisioner.node_score' do - it "should return the node available capacity when get the node score" do - @provisioner.node_score({"available_capacity" => 5}).should == 5 - end - end -end diff --git a/src/services/memcached/spec/spec_helper.rb b/src/services/memcached/spec/spec_helper.rb deleted file mode 100644 index feccb839..00000000 --- a/src/services/memcached/spec/spec_helper.rb +++ /dev/null @@ -1,76 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -# This code is based on Redis as a Service. - -PWD = File.dirname(__FILE__) - -$:.unshift File.join(PWD, '..') -$:.unshift File.join(PWD, '..', 'lib') - -require "rubygems" -require "rspec" -require 'bundler/setup' -require "vcap_services_base" -require "socket" -require "timeout" -require "erb" -require "fileutils" - - -def get_hostname(credentials) - host = credentials['host'] - port = credentials['port'].to_s - hostname = host + ":" + port - return hostname -end - -def get_connect_info(credentials) - hostname = get_hostname(credentials) - username = @credentials['user'] - password = @credentials['password'] - - return [hostname, username, password] -end - -def parse_property(hash, key, type, options = {}) - obj = hash[key] - if obj.nil? - raise "Missing required option: #{key}" unless options[:optional] - nil - elsif type == Range - raise "Invalid Range object: #{obj}" unless obj.kind_of?(Hash) - first, last = obj["first"], obj["last"] - raise "Invalid Range object: #{obj}" unless first.kind_of?(Integer) and last.kind_of?(Integer) - Range.new(first, last) - else - raise "Invalid #{type} object: #{obj}" unless obj.kind_of?(type) - obj - end -end - -def config_base_dir() - File.join(PWD, "../config/") -end - -def get_node_config() - config_file = File.join(config_base_dir, "memcached_node.yml") - config = YAML.load_file(config_file) - memcached_conf_template = File.join(PWD, "../resources/memcached.conf.erb") - - options = { - :logger => Logger.new(parse_property(config, "log_file", String, :optional => true) || STDOUT, "daily"), - :plan => parse_property(config, "plan", String), - :base_dir => parse_property(config, "base_dir", String), - :memcached_server_path => parse_property(config, "memcached_server_path", String), - :capacity => 50, - :node_id => parse_property(config, "node_id", String), - :port_range => Range.new(5000, 25000), - :mbus => parse_property(config, "mbus", String), - :memcached_log_dir => "/tmp/memcached/memcached_log", - :max_clients => parse_property(config, "max_clients", Integer), - :memcached_memory => parse_property(config, "memcached_memory", Integer), - :local_db => 'sqlite3:/tmp/memcached/memcached_node.db', - :local_db_file => "/tmp/memcached/memcached_node.db" - } - options[:logger].level = Logger::DEBUG - options -end diff --git a/src/services/memcached/vendor/cache/addressable-2.2.8.gem b/src/services/memcached/vendor/cache/addressable-2.2.8.gem deleted file mode 100644 index c29040d4..00000000 Binary files a/src/services/memcached/vendor/cache/addressable-2.2.8.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/bcrypt-ruby-2.1.4.gem b/src/services/memcached/vendor/cache/bcrypt-ruby-2.1.4.gem deleted file mode 100644 index cba34df3..00000000 Binary files a/src/services/memcached/vendor/cache/bcrypt-ruby-2.1.4.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/beefcake-0.3.7.gem b/src/services/memcached/vendor/cache/beefcake-0.3.7.gem deleted file mode 100644 index 43df1aa4..00000000 Binary files a/src/services/memcached/vendor/cache/beefcake-0.3.7.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/builder-3.0.0.gem b/src/services/memcached/vendor/cache/builder-3.0.0.gem deleted file mode 100644 index a2c6d160..00000000 Binary files a/src/services/memcached/vendor/cache/builder-3.0.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/cf-uaa-lib-1.3.7.gem b/src/services/memcached/vendor/cache/cf-uaa-lib-1.3.7.gem deleted file mode 100644 index 54df4858..00000000 Binary files a/src/services/memcached/vendor/cache/cf-uaa-lib-1.3.7.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/ci_reporter-1.7.0.gem b/src/services/memcached/vendor/cache/ci_reporter-1.7.0.gem deleted file mode 100644 index 3f129319..00000000 Binary files a/src/services/memcached/vendor/cache/ci_reporter-1.7.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/curb-0.7.18.gem b/src/services/memcached/vendor/cache/curb-0.7.18.gem deleted file mode 100644 index 455f8f81..00000000 Binary files a/src/services/memcached/vendor/cache/curb-0.7.18.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/daemons-1.1.8.gem b/src/services/memcached/vendor/cache/daemons-1.1.8.gem deleted file mode 100644 index c7cf5239..00000000 Binary files a/src/services/memcached/vendor/cache/daemons-1.1.8.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/dalli-2.0.5.gem b/src/services/memcached/vendor/cache/dalli-2.0.5.gem deleted file mode 100644 index 6c8e15bd..00000000 Binary files a/src/services/memcached/vendor/cache/dalli-2.0.5.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/data_objects-0.10.8.gem b/src/services/memcached/vendor/cache/data_objects-0.10.8.gem deleted file mode 100644 index 785855d7..00000000 Binary files a/src/services/memcached/vendor/cache/data_objects-0.10.8.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/datamapper-1.1.0.gem b/src/services/memcached/vendor/cache/datamapper-1.1.0.gem deleted file mode 100644 index 2f83dea1..00000000 Binary files a/src/services/memcached/vendor/cache/datamapper-1.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/diff-lcs-1.1.3.gem b/src/services/memcached/vendor/cache/diff-lcs-1.1.3.gem deleted file mode 100644 index 8767f39d..00000000 Binary files a/src/services/memcached/vendor/cache/diff-lcs-1.1.3.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/dm-aggregates-1.1.0.gem b/src/services/memcached/vendor/cache/dm-aggregates-1.1.0.gem deleted file mode 100644 index bdec7df0..00000000 Binary files a/src/services/memcached/vendor/cache/dm-aggregates-1.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/dm-constraints-1.1.0.gem b/src/services/memcached/vendor/cache/dm-constraints-1.1.0.gem deleted file mode 100644 index be01d0ff..00000000 Binary files a/src/services/memcached/vendor/cache/dm-constraints-1.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/dm-core-1.1.0.gem b/src/services/memcached/vendor/cache/dm-core-1.1.0.gem deleted file mode 100644 index 33f27852..00000000 Binary files a/src/services/memcached/vendor/cache/dm-core-1.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/dm-do-adapter-1.1.0.gem b/src/services/memcached/vendor/cache/dm-do-adapter-1.1.0.gem deleted file mode 100644 index f0b2f2dc..00000000 Binary files a/src/services/memcached/vendor/cache/dm-do-adapter-1.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/dm-migrations-1.1.0.gem b/src/services/memcached/vendor/cache/dm-migrations-1.1.0.gem deleted file mode 100644 index 04ac505d..00000000 Binary files a/src/services/memcached/vendor/cache/dm-migrations-1.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/dm-serializer-1.1.0.gem b/src/services/memcached/vendor/cache/dm-serializer-1.1.0.gem deleted file mode 100644 index 4a861974..00000000 Binary files a/src/services/memcached/vendor/cache/dm-serializer-1.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/dm-sqlite-adapter-1.1.0.gem b/src/services/memcached/vendor/cache/dm-sqlite-adapter-1.1.0.gem deleted file mode 100644 index da919e4c..00000000 Binary files a/src/services/memcached/vendor/cache/dm-sqlite-adapter-1.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/dm-timestamps-1.1.0.gem b/src/services/memcached/vendor/cache/dm-timestamps-1.1.0.gem deleted file mode 100644 index 48c51cca..00000000 Binary files a/src/services/memcached/vendor/cache/dm-timestamps-1.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/dm-transactions-1.1.0.gem b/src/services/memcached/vendor/cache/dm-transactions-1.1.0.gem deleted file mode 100644 index 538f2a30..00000000 Binary files a/src/services/memcached/vendor/cache/dm-transactions-1.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/dm-types-1.1.0.gem b/src/services/memcached/vendor/cache/dm-types-1.1.0.gem deleted file mode 100644 index 713e5cad..00000000 Binary files a/src/services/memcached/vendor/cache/dm-types-1.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/dm-validations-1.1.0.gem b/src/services/memcached/vendor/cache/dm-validations-1.1.0.gem deleted file mode 100644 index d50113ff..00000000 Binary files a/src/services/memcached/vendor/cache/dm-validations-1.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/do_sqlite3-0.10.8.gem b/src/services/memcached/vendor/cache/do_sqlite3-0.10.8.gem deleted file mode 100644 index e64a88e1..00000000 Binary files a/src/services/memcached/vendor/cache/do_sqlite3-0.10.8.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/em-http-request-1.0.0.beta.3.gem b/src/services/memcached/vendor/cache/em-http-request-1.0.0.beta.3.gem deleted file mode 100644 index bbfb465c..00000000 Binary files a/src/services/memcached/vendor/cache/em-http-request-1.0.0.beta.3.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/em-socksify-0.1.0.gem b/src/services/memcached/vendor/cache/em-socksify-0.1.0.gem deleted file mode 100644 index 8708cd9b..00000000 Binary files a/src/services/memcached/vendor/cache/em-socksify-0.1.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/eventmachine_httpserver-0.2.1.gem b/src/services/memcached/vendor/cache/eventmachine_httpserver-0.2.1.gem deleted file mode 100644 index 69733130..00000000 Binary files a/src/services/memcached/vendor/cache/eventmachine_httpserver-0.2.1.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/fastercsv-1.5.5.gem b/src/services/memcached/vendor/cache/fastercsv-1.5.5.gem deleted file mode 100644 index 02f249ce..00000000 Binary files a/src/services/memcached/vendor/cache/fastercsv-1.5.5.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/http_parser.rb-0.5.3.gem b/src/services/memcached/vendor/cache/http_parser.rb-0.5.3.gem deleted file mode 100644 index ec812a48..00000000 Binary files a/src/services/memcached/vendor/cache/http_parser.rb-0.5.3.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/httpclient-2.3.2.gem b/src/services/memcached/vendor/cache/httpclient-2.3.2.gem deleted file mode 100644 index ee758208..00000000 Binary files a/src/services/memcached/vendor/cache/httpclient-2.3.2.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/json-1.4.6.gem b/src/services/memcached/vendor/cache/json-1.4.6.gem deleted file mode 100644 index 53e04e6e..00000000 Binary files a/src/services/memcached/vendor/cache/json-1.4.6.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/json_pure-1.7.3.gem b/src/services/memcached/vendor/cache/json_pure-1.7.3.gem deleted file mode 100644 index feb8085e..00000000 Binary files a/src/services/memcached/vendor/cache/json_pure-1.7.3.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/macaddr-1.6.1.gem b/src/services/memcached/vendor/cache/macaddr-1.6.1.gem deleted file mode 100644 index 9288fd79..00000000 Binary files a/src/services/memcached/vendor/cache/macaddr-1.6.1.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/membrane-0.0.2.gem b/src/services/memcached/vendor/cache/membrane-0.0.2.gem deleted file mode 100644 index ac86a066..00000000 Binary files a/src/services/memcached/vendor/cache/membrane-0.0.2.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/mime-types-1.21.gem b/src/services/memcached/vendor/cache/mime-types-1.21.gem deleted file mode 100644 index 0bfdbe69..00000000 Binary files a/src/services/memcached/vendor/cache/mime-types-1.21.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/multi_json-1.3.6.gem b/src/services/memcached/vendor/cache/multi_json-1.3.6.gem deleted file mode 100644 index a37f5cb7..00000000 Binary files a/src/services/memcached/vendor/cache/multi_json-1.3.6.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/multipart-post-1.1.5.gem b/src/services/memcached/vendor/cache/multipart-post-1.1.5.gem deleted file mode 100644 index b8c6daa3..00000000 Binary files a/src/services/memcached/vendor/cache/multipart-post-1.1.5.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/nats-0.4.24.gem b/src/services/memcached/vendor/cache/nats-0.4.24.gem deleted file mode 100644 index 593ccb11..00000000 Binary files a/src/services/memcached/vendor/cache/nats-0.4.24.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/posix-spawn-0.3.6.gem b/src/services/memcached/vendor/cache/posix-spawn-0.3.6.gem deleted file mode 100644 index 1156f3a3..00000000 Binary files a/src/services/memcached/vendor/cache/posix-spawn-0.3.6.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/rack-1.4.1.gem b/src/services/memcached/vendor/cache/rack-1.4.1.gem deleted file mode 100644 index 6ed5b801..00000000 Binary files a/src/services/memcached/vendor/cache/rack-1.4.1.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/rake-0.9.2.2.gem b/src/services/memcached/vendor/cache/rake-0.9.2.2.gem deleted file mode 100644 index f7239ac2..00000000 Binary files a/src/services/memcached/vendor/cache/rake-0.9.2.2.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/redis-3.0.3.gem b/src/services/memcached/vendor/cache/redis-3.0.3.gem deleted file mode 100644 index 588a654e..00000000 Binary files a/src/services/memcached/vendor/cache/redis-3.0.3.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/redis-namespace-1.2.1.gem b/src/services/memcached/vendor/cache/redis-namespace-1.2.1.gem deleted file mode 100644 index 8d68f361..00000000 Binary files a/src/services/memcached/vendor/cache/redis-namespace-1.2.1.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/redisk-0.2.2.gem b/src/services/memcached/vendor/cache/redisk-0.2.2.gem deleted file mode 100644 index 3bcfbe4f..00000000 Binary files a/src/services/memcached/vendor/cache/redisk-0.2.2.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/resque-1.23.1.gem b/src/services/memcached/vendor/cache/resque-1.23.1.gem deleted file mode 100644 index c96d4842..00000000 Binary files a/src/services/memcached/vendor/cache/resque-1.23.1.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/resque-status-0.3.3.gem b/src/services/memcached/vendor/cache/resque-status-0.3.3.gem deleted file mode 100644 index bacc53f7..00000000 Binary files a/src/services/memcached/vendor/cache/resque-status-0.3.3.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/rspec-2.10.0.gem b/src/services/memcached/vendor/cache/rspec-2.10.0.gem deleted file mode 100644 index c3b316cd..00000000 Binary files a/src/services/memcached/vendor/cache/rspec-2.10.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/rspec-core-2.10.1.gem b/src/services/memcached/vendor/cache/rspec-core-2.10.1.gem deleted file mode 100644 index f06fdbdf..00000000 Binary files a/src/services/memcached/vendor/cache/rspec-core-2.10.1.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/rspec-expectations-2.10.0.gem b/src/services/memcached/vendor/cache/rspec-expectations-2.10.0.gem deleted file mode 100644 index 50f8fe8e..00000000 Binary files a/src/services/memcached/vendor/cache/rspec-expectations-2.10.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/rspec-mocks-2.10.1.gem b/src/services/memcached/vendor/cache/rspec-mocks-2.10.1.gem deleted file mode 100644 index 7df6ef6b..00000000 Binary files a/src/services/memcached/vendor/cache/rspec-mocks-2.10.1.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/ruby-hmac-0.4.0.gem b/src/services/memcached/vendor/cache/ruby-hmac-0.4.0.gem deleted file mode 100644 index 5d070197..00000000 Binary files a/src/services/memcached/vendor/cache/ruby-hmac-0.4.0.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/rubyzip-0.9.9.gem b/src/services/memcached/vendor/cache/rubyzip-0.9.9.gem deleted file mode 100644 index 6b87e2e3..00000000 Binary files a/src/services/memcached/vendor/cache/rubyzip-0.9.9.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/simplecov-0.6.4.gem b/src/services/memcached/vendor/cache/simplecov-0.6.4.gem deleted file mode 100644 index caf279dd..00000000 Binary files a/src/services/memcached/vendor/cache/simplecov-0.6.4.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/simplecov-html-0.5.3.gem b/src/services/memcached/vendor/cache/simplecov-html-0.5.3.gem deleted file mode 100644 index eda2ba49..00000000 Binary files a/src/services/memcached/vendor/cache/simplecov-html-0.5.3.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/simplecov-rcov-0.2.3.gem b/src/services/memcached/vendor/cache/simplecov-rcov-0.2.3.gem deleted file mode 100644 index c69ff0c7..00000000 Binary files a/src/services/memcached/vendor/cache/simplecov-rcov-0.2.3.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/sinatra-1.2.8.gem b/src/services/memcached/vendor/cache/sinatra-1.2.8.gem deleted file mode 100644 index 7b1906d8..00000000 Binary files a/src/services/memcached/vendor/cache/sinatra-1.2.8.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/stringex-1.2.2.gem b/src/services/memcached/vendor/cache/stringex-1.2.2.gem deleted file mode 100644 index bd1d687f..00000000 Binary files a/src/services/memcached/vendor/cache/stringex-1.2.2.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/systemu-2.5.2.gem b/src/services/memcached/vendor/cache/systemu-2.5.2.gem deleted file mode 100644 index 6d914935..00000000 Binary files a/src/services/memcached/vendor/cache/systemu-2.5.2.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/thin-1.3.1.gem b/src/services/memcached/vendor/cache/thin-1.3.1.gem deleted file mode 100644 index dee36f0b..00000000 Binary files a/src/services/memcached/vendor/cache/thin-1.3.1.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/tilt-1.3.3.gem b/src/services/memcached/vendor/cache/tilt-1.3.3.gem deleted file mode 100644 index 27549643..00000000 Binary files a/src/services/memcached/vendor/cache/tilt-1.3.3.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/uuid-2.3.7.gem b/src/services/memcached/vendor/cache/uuid-2.3.7.gem deleted file mode 100644 index 66016b8c..00000000 Binary files a/src/services/memcached/vendor/cache/uuid-2.3.7.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/uuidtools-2.1.3.gem b/src/services/memcached/vendor/cache/uuidtools-2.1.3.gem deleted file mode 100644 index a489d97c..00000000 Binary files a/src/services/memcached/vendor/cache/uuidtools-2.1.3.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/vegas-0.1.11.gem b/src/services/memcached/vendor/cache/vegas-0.1.11.gem deleted file mode 100644 index a1c77fcf..00000000 Binary files a/src/services/memcached/vendor/cache/vegas-0.1.11.gem and /dev/null differ diff --git a/src/services/memcached/vendor/cache/yajl-ruby-1.1.0.gem b/src/services/memcached/vendor/cache/yajl-ruby-1.1.0.gem deleted file mode 100644 index 3fcb580e..00000000 Binary files a/src/services/memcached/vendor/cache/yajl-ruby-1.1.0.gem and /dev/null differ