| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- local vshard = require('vshard')
- local log = require('log')
- -- Bootstrap the vshard router.
- while true do
- local ok, err = vshard.router.bootstrap({
- if_not_bootstrapped = true,
- })
- if ok then
- break
- end
- log.info(('Router bootstrap error: %s'):format(err))
- end
- -- functions for filer_metadata space
- local filer_metadata = {
- delete_by_directory_idx = function(directory)
- -- find all storages
- local storages = require('vshard').router.routeall()
- -- on each storage
- for _, storage in pairs(storages) do
- -- call local function
- local result, err = storage:callrw('filer_metadata.delete_by_directory_idx', { directory })
- -- check for error
- if err then
- error("Failed to call function on storage: " .. tostring(err))
- end
- end
- -- return
- return true
- end,
- find_by_directory_idx_and_name = function(dirPath, startFileName, includeStartFile, limit)
- -- init results
- local results = {}
- -- find all storages
- local storages = require('vshard').router.routeall()
- -- on each storage
- for _, storage in pairs(storages) do
- -- call local function
- local result, err = storage:callro('filer_metadata.find_by_directory_idx_and_name', {
- dirPath,
- startFileName,
- includeStartFile,
- limit
- })
- -- check for error
- if err then
- error("Failed to call function on storage: " .. tostring(err))
- end
- -- add to results
- for _, tuple in ipairs(result) do
- table.insert(results, tuple)
- end
- end
- -- sort
- table.sort(results, function(a, b) return a[3] < b[3] end)
- -- apply limit
- if #results > limit then
- local limitedResults = {}
- for i = 1, limit do
- table.insert(limitedResults, results[i])
- end
- results = limitedResults
- end
- -- return
- return results
- end,
- }
- rawset(_G, 'filer_metadata', filer_metadata)
- -- register functions for filer_metadata space, set grants
- for name, _ in pairs(filer_metadata) do
- box.schema.func.create('filer_metadata.' .. name, { if_not_exists = true })
- box.schema.user.grant('app', 'execute', 'function', 'filer_metadata.' .. name, { if_not_exists = true })
- box.schema.user.grant('client', 'execute', 'function', 'filer_metadata.' .. name, { if_not_exists = true })
- end
|