From 4143173cd08ef515173e5ad4b4c15d4e9f9f1943 Mon Sep 17 00:00:00 2001 From: HuabingZhao Date: Wed, 17 Aug 2016 12:37:07 +0800 Subject: 1. Adjust the directory hierarchy 2. Fix the compile issue Change-Id: Ibf10c83104e5e673bc797013799861426cd950ce Signed-off-by: HuabingZhao --- .../resources/openresty/nginx/luaext/dao/dao.lua | 120 ------------- .../openresty/nginx/luaext/dao/db_access.lua | 74 -------- .../openresty/nginx/luaext/dao/redis_db.lua | 193 --------------------- 3 files changed, 387 deletions(-) delete mode 100644 openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao/dao.lua delete mode 100644 openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao/db_access.lua delete mode 100644 openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao/redis_db.lua (limited to 'openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao') diff --git a/openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao/dao.lua b/openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao/dao.lua deleted file mode 100644 index fb47cca..0000000 --- a/openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao/dao.lua +++ /dev/null @@ -1,120 +0,0 @@ ---[[ - - Copyright (C) 2016 ZTE, Inc. and others. All rights reserved. (ZTE) - - 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 module integrates the shcache with an abstraction for various databases(redis and so on) -local _M = {} -_M._VERSION = '1.0.0' - -local shcache = require("vendor.shcache") -local cjson = require "cjson" -local msbConf = require('conf.msbinit') - -local DB = require('dao.redis_db') -local options = msbConf.redisConf - -local cacheConf = msbConf.cacheConf -local positive_ttl = cacheConf.positive_ttl or 60 -local negative_ttl = cacheConf.negative_ttl or 2 - -local svc_shcache = ngx.shared.svc_cache - -local function load_serviceinfo(key) - - -- closure to perform external lookup to redis - local fetch_svcinfo_from_db = function () - local _db = DB:new(options) - return _db:getserviceinfo(key) - end - - local svcinfo_cache_table = shcache:new( - svc_shcache, - { external_lookup = fetch_svcinfo_from_db, - --encode = cmsgpack.pack, - encode = cjson.encode, - --decode = cmsgpack.unpack - decode = cjson.decode - }, - { positive_ttl = positive_ttl, -- default cache good data for 60s - negative_ttl = negative_ttl, -- default cache failed lookup for 5s - name = 'svcinfo_cache' -- "named" cache, useful for debug / report - } - ) - - local serviceinfo, from_cache = svcinfo_cache_table:load(key) - - return serviceinfo -end -_M.load_serviceinfo = load_serviceinfo - -local function load_backservers(keypattern) - - -- closure to perform external lookup to redis - local fetch_servers_from_db = function () - local _db = DB:new(options) - return _db:getbackservers(keypattern) - end - - local servers_cache_table = shcache:new( - svc_shcache, - { external_lookup = fetch_servers_from_db, - --encode = cmsgpack.pack, - encode = cjson.encode, - --decode = cmsgpack.unpack - decode = cjson.decode - }, - { positive_ttl = positive_ttl, -- default cache good data for 60s - negative_ttl = negative_ttl, -- default cache failed lookup for 5s - name = 'servers_cache' -- "named" cache, useful for debug / report - } - ) - - local servers_table, from_cache = servers_cache_table:load(keypattern) - - return servers_table -end -_M.load_backservers = load_backservers - - -local function load_customsvcnames(keypattern) - -- closure to perform external lookup to redis - local fetch_svcnames_from_db = function () - local _db = DB:new(options) - return _db:getcustomsvcnames(keypattern) - end - - local svcnames_cache_table = shcache:new( - svc_shcache, - { external_lookup = fetch_svcnames_from_db, - --encode = cmsgpack.pack, - encode = cjson.encode, - --decode = cmsgpack.unpack - decode = cjson.decode - }, - { positive_ttl = positive_ttl, -- default cache good data for 60s - negative_ttl = negative_ttl, -- default cache failed lookup for 5s - name = 'svcnames_cache' -- "named" cache, useful for debug / report - } - ) - - local service_names, from_cache = svcnames_cache_table:load(keypattern) - - return service_names -end -_M.load_customsvcnames = load_customsvcnames - -return _M \ No newline at end of file diff --git a/openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao/db_access.lua b/openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao/db_access.lua deleted file mode 100644 index 4848a09..0000000 --- a/openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao/db_access.lua +++ /dev/null @@ -1,74 +0,0 @@ ---[[ - - Copyright (C) 2016 ZTE, Inc. and others. All rights reserved. (ZTE) - - 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. - ---]] - --- unified layer to access back DB, using two levels of cache mechanism(LRUCache and shcache) -local _M = {} -_M._VERSION = '1.0.0' - -local cache = require('lib.tools.db_cache') -local dao = require('dao.dao') -local msbConf = require('conf.msbinit') - -local cacheConf = msbConf.cacheConf -local lru_ttl = cacheConf.lru_ttl or 10 - -function _M.load_serviceinfo(key) - local value, err - -- Try to get from cache - value = cache.get(key) - if not value then - -- Get from shcache or backend redis - value = dao.load_serviceinfo(key) - cache.set(key,value,lru_ttl) - end - if cache.is_empty(value) then - return nil - end - return value -end - -function _M.load_backservers(keypattern) - local value, err - -- Try to get from cache - value = cache.get(keypattern) - if not value then - -- Get from shcache or backend redis - value = dao.load_backservers(keypattern) - cache.set(keypattern,value,lru_ttl) - end - if cache.is_empty(value) then - return nil - end - return value -end - -function _M.load_customsvcnames(keypattern) - local value, err - -- Try to get from cache - value = cache.get(keypattern) - if not value then - -- Get from shcache or backend redis - value = dao.load_customsvcnames(keypattern) - cache.set(keypattern,value,lru_ttl) - end - if cache.is_empty(value) then - return nil - end - return value -end -return _M \ No newline at end of file diff --git a/openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao/redis_db.lua b/openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao/redis_db.lua deleted file mode 100644 index c5b75c6..0000000 --- a/openresty-ext/src/assembly/resources/openresty/nginx/luaext/dao/redis_db.lua +++ /dev/null @@ -1,193 +0,0 @@ ---[[ - - Copyright (C) 2016 ZTE, Inc. and others. All rights reserved. (ZTE) - - 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. - ---]] - --- the client for redis, include the connection pool management and api implements -local redis = require('resty.redis') -local tbl_util = require('lib.utils.table_util') - -local _M = { -} -_M._VERSION = '0.0.1' -_M._DESCRIPTION = 'msb_redis_module' - -local mt = { __index = _M } - -local tbl_insert = table.insert -local tbl_sort = table.sort -local tbl_isempty = tbl_util.isempty - -function _M.new(self, conf) - self.host = conf.host - self.port = conf.port - self.timeout = conf.timeout - self.dbid = conf.dbid - self.poolsize = conf.poolsize - self.idletimeout = conf.idletimeout - - local red = redis:new() - return setmetatable({redis = red}, mt) -end - -function _M.connectdb(self) - local host = self.host - local port = self.port - local dbid = self.dbid - local red = self.redis - - if not (host and port) then - return nil, 'no host:port avaliable provided' - end - - --set default value - if not dbid then dbid = 0 end - local timeout = self.timeout - if not timeout then - timeout = 1000 -- 1s - end - - red:set_timeout(timeout) - - local ok, err - if host and port then - ok, err = red:connect(host, port) - if ok then return red:select(dbid) end - end - - return ok, err -end - -function _M.keepalivedb(self) - local max_idle_timeout = self.idletimeout --ms - local pool_size = self.poolsize - - if not pool_size then pool_size = 100 end - if not max_idle_timeout then max_idle_timeout = 90000 end --90s - - local ok, err = self.redis:set_keepalive(max_idle_timeout, pool_size) - if not ok then - ngx.log(ngx.ERR, "redis pool keepalive error",err) - return - end - return -end - ---inner function,only used in this module -local function _hgetall(red,key) - local resp,err = red:hgetall(key) - --if not resp or next(resp) == nil then - if tbl_isempty(resp) then - return nil, "key "..key.." not found" - end - local hashinfo = red:array_to_hash(resp) - return hashinfo,nil -end - -function _M.getserviceinfo(self,key) - if not key then - return nil,'no key is provided' - end - local c, err = self:connectdb() - if not c then - return nil, err - end - - local red = self.redis - - local resp,err = red:hgetall(key) --the key will create dynamically - --if not resp or next(resp) == nil then - if tbl_isempty(resp) then - self:keepalivedb() - return nil, "key "..key.." not found" - end - - local serviceinfo = red:array_to_hash(resp) - - self:keepalivedb() - - return serviceinfo,nil -end - -function _M.getbackservers(self,keypattern) - if not keypattern then - return nil,'no keypattern is provided' - end - local c, err = self:connectdb() - if not c then - return nil, err - end - - local red = self.redis - - local resp, err = red:keys(keypattern) - if tbl_isempty(resp) then - self:keepalivedb() - return nil, "no server matched" - end - - local servers = {} - for i, v in ipairs(resp) do - local serverinfo,err = _hgetall(red,v) - if serverinfo then - tbl_insert(servers,serverinfo) - end - end - self:keepalivedb() - return servers,nil -end - -function _M.getcustomsvcnames(self,keypattern) - if not keypattern then - return nil,'no keypattern is provided' - end - local c, err = self:connectdb() - if not c then - return nil, err - end - - local red = self.redis - - local resp, err = red:keys(keypattern) - if tbl_isempty(resp) then - self:keepalivedb() - return {}, "no custome service name found" - end - - local svcnames = {} - --store svc names into the Set - local key_set={} - local name - for key, value in ipairs(resp) do - local m, err = ngx.re.match(value, "^.+:custom:([^:]+):.*", "o") - if m then - name = m[1] - key_set[name]=true - end - end - - for key,_ in pairs(key_set) do - tbl_insert(svcnames,key) - end - --sort the key_table in reverse order - tbl_sort(svcnames, function (a, b) - return a > b - end) - - self:keepalivedb() - return svcnames,nil -end -return _M \ No newline at end of file -- cgit 1.2.3-korg