1 | var async = require('async')
|
2 |
|
3 | module.exports = function deleteTable(store, data, cb) {
|
4 |
|
5 | var key = data.TableName, tableDb = store.tableDb
|
6 |
|
7 | store.getTable(key, false, function(err, table) {
|
8 | if (err) return cb(err)
|
9 |
|
10 |
|
11 | if (table.TableStatus == 'CREATING') {
|
12 | err = new Error
|
13 | err.statusCode = 400
|
14 | err.body = {
|
15 | __type: 'com.amazonaws.dynamodb.v20120810#ResourceInUseException',
|
16 | message: 'Attempt to change a resource which is still in use: Table is being created: ' + key,
|
17 | }
|
18 | return cb(err)
|
19 | }
|
20 |
|
21 | table.TableStatus = 'DELETING'
|
22 |
|
23 | var deletes = [store.deleteItemDb.bind(store, key), store.deleteTagDb.bind(store, key)]
|
24 | ;['Local', 'Global'].forEach(function(indexType) {
|
25 | var indexes = table[indexType + 'SecondaryIndexes'] || []
|
26 | deletes = deletes.concat(indexes.map(function(index) {
|
27 | return store.deleteIndexDb.bind(store, indexType, table.TableName, index.IndexName)
|
28 | }))
|
29 | })
|
30 |
|
31 | delete table.GlobalSecondaryIndexes
|
32 |
|
33 | tableDb.put(key, table, function(err) {
|
34 | if (err) return cb(err)
|
35 |
|
36 | async.parallel(deletes, function(err) {
|
37 | if (err) return cb(err)
|
38 |
|
39 | setTimeout(function() {
|
40 | tableDb.del(key, function(err) {
|
41 |
|
42 | if (err && !/Database is not open/.test(err)) console.error(err.stack || err)
|
43 | })
|
44 | }, store.options.deleteTableMs)
|
45 |
|
46 | cb(null, {TableDescription: table})
|
47 | })
|
48 | })
|
49 | })
|
50 |
|
51 | }
|