/
memdbindex
executable file
·81 lines (71 loc) · 2.38 KB
/
memdbindex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/env node
// Copyright 2015 rain1017.
//
// 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. See the AUTHORS file
// for names of contributors.
'use strict';
var minimist = require('minimist');
var helpContent = '\
MemDB Index Builder\n\n\
Usage: memdbindex [rebuild | drop] [options]\n\
Options:\n\
-c, --conf path Config file path\n\
-t, --coll collection Collection name\n\
-k, --keys key1.key2 Index keys (split with ".")\n';
var getIndexOpts = function(conf, collName, keys){
var indexes = conf.collections && conf.collections[collName] && conf.collections[collName].indexes;
if(!indexes){
return null;
}
for(var i in indexes){
var index = indexes[i];
if(JSON.stringify(index.keys.sort()) === JSON.stringify(keys.sort())){
return index;
}
}
return null;
};
if (require.main === module){
var argv = minimist(process.argv.slice(3));
var cmd = process.argv[2];
if(process.argv.length <= 3 || argv.help || argv.h){
console.log(helpContent);
process.exit(0);
}
var config = require('../app/config');
config.init(argv.conf || argv.c);
var conf = config.shardConfig(config.getShardIds()[0]);
var collName = argv.coll || argv.t;
if(!collName){
throw new Error('collection not specified');
}
var keys = argv.keys || argv.k;
if(!keys){
throw new Error('keys not specified');
}
keys = keys.split('.').sort();
var indexbuilder = require('../app/indexbuilder');
if(cmd === 'rebuild'){
var opts = getIndexOpts(conf, collName, keys);
if(!opts){
throw new Error('specified index is not configured');
}
indexbuilder.rebuild(conf, collName, keys, opts);
}
else if(cmd === 'drop'){
indexbuilder.drop(conf, collName, keys);
}
else{
throw new Error('invalid cmd - ' + cmd);
}
}