Skip to content

Instantly share code, notes, and snippets.

@aseemk
Created August 10, 2011 17:26
Show Gist options
  • Save aseemk/1137523 to your computer and use it in GitHub Desktop.
Save aseemk/1137523 to your computer and use it in GitHub Desktop.
Streamline bug: more duplicate executions?
var __global = typeof global !== 'undefined' ? global : window;
function __cb(_, fn){ var ctx = __global.__context; return function(err, result){ __global.__context = ctx; if (err) return _(err); try { return fn(null, result); } catch (ex) { return __propagate(_, ex); } } }
function __future(fn, args, i){ var done, err, result; var cb = function(e, r){ done = true; err = e, result = r; }; args = Array.prototype.slice.call(args); args[i] = function(e, r){ cb(e, r); }; fn.apply(this, args); return function(_){ if (done) _.call(this, err, result); else cb = _.bind(this); } .bind(this); }
function __nt(_, fn){ var i = 0; var cb = __cb(_, fn); var safeCb = function(){ try { cb(); } catch (ex) { __propagate(cb, ex); } }; if (typeof process != "undefined" && typeof process.nextTick == "function") return function(){ if (++i % 20 == 0) process.nextTick(safeCb); else cb(); }; else return function(){ if (++i % 20 == 0) setTimeout(safeCb); else cb(); }; }
function __propagate(_, err){ try { _(err); } catch (ex) { __trap(ex); } }
function __trap(err){ if (err) { if (__global.__context && __global.__context.errorHandler) __global.__context.errorHandler(err); else console.error("UNCAUGHT EXCEPTION: " + err.message + "\n" + err.stack); } }
/* 1 */ var FollowEvent;
/* 2 */ var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
/* 3 */ for (var key in parent) {
/* 3 */ if (__hasProp.call(parent, key)) {
/* 3 */ child[key] = parent[key];
};
};
/* 4 */ function ctor() {
/* 4 */ this.constructor = child;
};
/* 5 */ ctor.prototype = parent.prototype;
/* 6 */ child.prototype = new ctor;
/* 7 */ child.__super__ = parent.prototype;
/* 8 */ return child;
/* 9 */ }, __bind = function(fn, me) {
/* 9 */ return function() {
/* 9 */ return fn.apply(me, arguments);
};
};
/* 10 */ module.exports = FollowEvent = (function() {
/* 11 */ __extends(FollowEvent, Event);
/* 12 */ function FollowEvent() {
/* 13 */ FollowEvent.__super__.constructor.apply(this, arguments);
};
/* 15 */ FollowEvent.prototype["delete"] = function __1(_, force) {
if (!_) {
return __future.call(this, __1, arguments, 0);
}
;
var deleteRel, __this = this, __arguments = arguments;
/* 17 */ if ((force == null)) {
/* 18 */ force = false;
}
;
/* 20 */ console.log((("about to delete follow " + __this) + "..."));
/* 21 */ deleteRel = __bind(function __1(rel, _) {
if (!_) {
return __future.call(this, __1, arguments, 1);
}
;
var rels, _i, _len, _results, __this = this;
/* 23 */ return __this._getRelationships(rel, __cb(_, function(__0, __1) {
/* 23 */ rels = __1;
/* 24 */ _results = [];
/* 25 */ _i = 0;
/* 25 */ _len = rels.length;
var __5 = false;
return (function(__break) {
var __loop = __nt(_, function() {
if (__5) {
/* 25 */ _i++;
}
else {
__5 = true;
}
;
/* 25 */ var __4 = (_i < _len);
if (__4) {
/* 26 */ rel = rels[_i];
/* 27 */ return rel["delete"](__cb(_, function(__0, __2) {
/* 27 */ _results.push(__2);
__loop();
}));
}
else {
__break();
}
;
});
__loop();
})(function() {
/* 29 */ return _(null, _results);
});
}));
}, __this);
/* 31 */ return deleteRel(FollowEvent.REL_SOURCE, __cb(_, function() {
/* 32 */ return deleteRel(FollowEvent.REL_TARGET, __cb(_, function() {
/* 33 */ Event.prototype["delete"].apply(__this, __arguments);
/* 34 */ return _(null, console.log((("finished deleting follow " + __this) + ".")));
}));
}));
};
/* 36 */ return FollowEvent;
/* 37 */ })();
module.exports = class FollowEvent extends Event
# Overrides
delete: (_, force=false) ->
console.log "about to delete follow #{@}..."
# Manually and explicitly delete the source and target relationships
# first. TODO eventually parallelize, but not a big deal.
deleteRel = (rel, _) =>
rels = @_getRelationships rel, _
rel.delete _ for rel in rels
deleteRel FollowEvent.REL_SOURCE, _
deleteRel FollowEvent.REL_TARGET, _
# Then delete this node:
# XXX can't use super here; streamline makes this func anonymous...
Event::delete.apply this, arguments
console.log "finished deleting follow #{@}."
var FollowEvent;
var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }
function ctor() { this.constructor = child; }
ctor.prototype = parent.prototype;
child.prototype = new ctor;
child.__super__ = parent.prototype;
return child;
}, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
module.exports = FollowEvent = (function() {
__extends(FollowEvent, Event);
function FollowEvent() {
FollowEvent.__super__.constructor.apply(this, arguments);
}
FollowEvent.prototype["delete"] = function(_, force) {
var deleteRel;
if (force == null) {
force = false;
}
console.log("about to delete follow " + this + "...");
deleteRel = __bind(function(rel, _) {
var rels, _i, _len, _results;
rels = this._getRelationships(rel, _);
_results = [];
for (_i = 0, _len = rels.length; _i < _len; _i++) {
rel = rels[_i];
_results.push(rel["delete"](_));
}
return _results;
}, this);
deleteRel(FollowEvent.REL_SOURCE, _);
deleteRel(FollowEvent.REL_TARGET, _);
Event.prototype["delete"].apply(this, arguments);
return console.log("finished deleting follow " + this + ".");
};
return FollowEvent;
})();
var __global = typeof global !== 'undefined' ? global : window;
function __cb(_, fn){ var ctx = __global.__context; return function(err, result){ __global.__context = ctx; if (err) return _(err); try { return fn(null, result); } catch (ex) { return __propagate(_, ex); } } }
function __future(fn, args, i){ var done, err, result; var cb = function(e, r){ done = true; err = e, result = r; }; args = Array.prototype.slice.call(args); args[i] = function(e, r){ cb(e, r); }; fn.apply(this, args); return function(_){ if (done) _.call(this, err, result); else cb = _.bind(this); } .bind(this); }
function __nt(_, fn){ var i = 0; var cb = __cb(_, fn); var safeCb = function(){ try { cb(); } catch (ex) { __propagate(cb, ex); } }; if (typeof process != "undefined" && typeof process.nextTick == "function") return function(){ if (++i % 20 == 0) process.nextTick(safeCb); else cb(); }; else return function(){ if (++i % 20 == 0) setTimeout(safeCb); else cb(); }; }
function __propagate(_, err){ try { _(err); } catch (ex) { __trap(ex); } }
function __trap(err){ if (err) { if (__global.__context && __global.__context.errorHandler) __global.__context.errorHandler(err); else console.error("UNCAUGHT EXCEPTION: " + err.message + "\n" + err.stack); } }
function __tryCatch(_, fn){ try { fn(); } catch (e) { try { _(e); } catch (ex) { __trap(ex); } } }
/* 1 */ var Node;
/* 2 */ var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
/* 3 */ for (var key in parent) {
/* 3 */ if (__hasProp.call(parent, key)) {
/* 3 */ child[key] = parent[key];
};
};
/* 4 */ function ctor() {
/* 4 */ this.constructor = child;
};
/* 5 */ ctor.prototype = parent.prototype;
/* 6 */ child.prototype = new ctor;
/* 7 */ child.__super__ = parent.prototype;
/* 8 */ return child;
};
/* 10 */ module.exports = Node = (function() {
/* 11 */ __extends(Node, PropertyContainer);
/* 12 */ function Node() {
/* 13 */ Node.__super__.constructor.apply(this, arguments);
};
/* 15 */ Node.prototype["delete"] = function __1(_, force) {
if (!_) {
return __future.call(this, __1, arguments, 0);
}
;
var message, relationship, relationships, response, _i, _len, __this = this;
/* 17 */ if ((force == null)) {
/* 18 */ force = false;
}
;
/* 20 */ if (!__this.exists) {
return _(null);
}
;
/* 23 */ console.log((("about to delete " + __this) + "..."));
return (function(__then) {
(function(_) {
__tryCatch(_, function() {
/* 25 */ return __this.all(null, __cb(_, function(__0, __1) {
/* 25 */ relationships = __1;
/* 26 */ if ((relationships.length && !force)) {
/* 27 */ return _(new Error((("Could not delete " + __this) + "; still has relationships.")));
}
;
/* 29 */ _i = 0;
/* 29 */ _len = relationships.length;
var __5 = false;
return (function(__break) {
var __loop = __nt(_, function() {
if (__5) {
/* 29 */ _i++;
}
else {
__5 = true;
}
;
/* 29 */ var __4 = (_i < _len);
if (__4) {
/* 30 */ relationship = relationships[_i];
/* 31 */ return relationship["delete"](__cb(_, __loop));
}
else {
__break();
}
;
});
__loop();
})(function() {
/* 33 */ return request.del(__this.self, __cb(_, function(__0, __2) {
/* 33 */ response = __2;
/* 34 */ if ((response.statusCode !== status.NO_CONTENT)) {
/* 35 */ message = "";
/* 36 */ switch (response.statusCode) {
/* 37 */ case status.NOT_FOUND:
/* 37 */ message = "Node not found";
/* 38 */ break;
/* 39 */ case status.CONFLICT:
message = "Node could not be deleted (still has relationships?)";
/* 40 */ };
/* 40 */ return _(new Error(message));
/* 41 */ }
;
console.log((("finished deleting " + __this) + "."));
/* 43 */ __then();
}));
});
/* 45 */ }));
});
})(function(error, __result) {
__tryCatch(_, function() {
if (error) {
return _(adjustError(error));
}
else {
_(null, __result);
/* 47 */ }
;
});
});
})(function() {
__tryCatch(_, _);
});
};
return Node;
})();
module.exports = class Node extends PropertyContainer
# throws an error if this node has any relationships on it, unless force
# is true, in which case the relationships are also deleted.
delete: (_, force=false) ->
if not @exists
return
console.log "about to delete #{@}..."
try
# Does this node have any relationships on it?
relationships = @all null, _
# If so, and it's not expected, prevent mistakes!
if relationships.length and not force
throw new Error "Could not delete #{@}; still has relationships."
# Otherwise, if there are any, delete the relationships
# TODO parallelize using Streamline
for relationship in relationships
relationship.delete _
# Delete node
response = request.del @self, _
if response.statusCode isnt status.NO_CONTENT
# database error
message = ''
switch response.statusCode
when status.NOT_FOUND
message = 'Node not found'
when status.CONFLICT
message = 'Node could not be deleted (still has relationships?)'
throw new Error message
# success
console.log "finished deleting #{@}."
return
catch error
throw adjustError error
var Node;
var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }
function ctor() { this.constructor = child; }
ctor.prototype = parent.prototype;
child.prototype = new ctor;
child.__super__ = parent.prototype;
return child;
};
module.exports = Node = (function() {
__extends(Node, PropertyContainer);
function Node() {
Node.__super__.constructor.apply(this, arguments);
}
Node.prototype["delete"] = function(_, force) {
var message, relationship, relationships, response, _i, _len;
if (force == null) {
force = false;
}
if (!this.exists) {
return;
}
console.log("about to delete " + this + "...");
try {
relationships = this.all(null, _);
if (relationships.length && !force) {
throw new Error("Could not delete " + this + "; still has relationships.");
}
for (_i = 0, _len = relationships.length; _i < _len; _i++) {
relationship = relationships[_i];
relationship["delete"](_);
}
response = request.del(this.self, _);
if (response.statusCode !== status.NO_CONTENT) {
message = '';
switch (response.statusCode) {
case status.NOT_FOUND:
message = 'Node not found';
break;
case status.CONFLICT:
message = 'Node could not be deleted (still has relationships?)';
}
throw new Error(message);
}
console.log("finished deleting " + this + ".");
} catch (error) {
throw adjustError(error);
}
};
return Node;
})();
/*** Generated by streamline 0.1.35 - DO NOT EDIT ***/
var __global = typeof global !== 'undefined' ? global : window;
function __cb(_, fn){ var ctx = __global.__context; return function(err, result){ __global.__context = ctx; if (err) return _(err); try { return fn(null, result); } catch (ex) { return __propagate(_, ex); } } }
function __nt(_, fn){ var i = 0; var cb = __cb(_, fn); var safeCb = function(){ try { cb(); } catch (ex) { __propagate(cb, ex); } }; if (typeof process != "undefined" && typeof process.nextTick == "function") return function(){ if (++i % 20 == 0) process.nextTick(safeCb); else cb(); }; else return function(){ if (++i % 20 == 0) setTimeout(safeCb); else cb(); }; }
function __propagate(_, err){ try { _(err); } catch (ex) { __trap(ex); } }
function __trap(err){ if (err) { if (__global.__context && __global.__context.errorHandler) __global.__context.errorHandler(err); else console.error("UNCAUGHT EXCEPTION: " + err.message + "\n" + err.stack); } }
(function __main(_) {
var FollowEvent, Model, User, assert, count, event, events, follow, follows, future, futures, i, models, neo4j, user, users, _i, _j, _k, _len, _len2, _len3, _len4;
/* 2 */ assert = require("assert");
/* 3 */ models = require("thingdom-models");
/* 4 */ neo4j = require("neo4j");
/* 5 */ Model = models.Model;
/* 6 */ User = models.User;
/* 7 */ FollowEvent = models.FollowEvent;
/* 8 */ console.log("Fetching users...");
/* 9 */ return User.all(__cb(_, function(__0, __5) {
/* 9 */ users = __5;
/* 10 */ console.log((("Found " + users.length) + " users; fetching follows..."));
/* 22 */ return (function __1(_) {
var _i, _len, _results;
/* 13 */ _results = [];
/* 14 */ for (_i = 0, _len = users.length; (_i < _len); _i++) {
/* 15 */ user = users[_i];
/* 16 */ _results.push(user._getRelationships({
/* 17 */ type: User.REL_FOLLOWS,
/* 18 */ direction: Model.DIR_OUT
}));
};
/* 21 */ return _(null, _results);
/* 22 */ })(__cb(_, function(__0, __6) {
/* 11 */ futures = __6;
/* 23 */ follows = [];
/* 24 */ _i = 0;
/* 24 */ _len = futures.length;
var __16 = false;
return (function(__break) {
var __loop = __nt(_, function() {
if (__16) {
/* 24 */ _i++;
}
else {
__16 = true;
}
;
/* 24 */ var __15 = (_i < _len);
if (__15) {
/* 25 */ future = futures[_i];
/* 26 */ return future(__cb(_, function(__0, __7) {
/* 26 */ follows = follows.concat(__7);
__loop();
}));
}
else {
__break();
}
;
});
__loop();
})(function() {
/* 28 */ console.log((("Found " + follows.length) + " follows; deleting..."));
/* 37 */ return (function __2(_) {
var _j, _len2, _results;
/* 31 */ _results = [];
/* 32 */ for (_j = 0, _len2 = follows.length; (_j < _len2); _j++) {
/* 33 */ follow = follows[_j];
/* 34 */ _results.push(follow["delete"]());
};
/* 36 */ return _(null, _results);
/* 37 */ })(__cb(_, function(__0, __8) {
/* 29 */ futures = __8;
/* 38 */ _j = 0;
/* 38 */ _len2 = futures.length;
var __20 = false;
return (function(__break) {
var __loop = __nt(_, function() {
if (__20) {
/* 38 */ _j++;
}
else {
__20 = true;
}
;
/* 38 */ var __19 = (_j < _len2);
if (__19) {
/* 39 */ future = futures[_j];
/* 40 */ return future(__cb(_, __loop));
}
else {
__break();
}
;
});
__loop();
})(function() {
/* 42 */ console.log("Fetching follow events...");
/* 43 */ return FollowEvent.all(__cb(_, function(__0, __9) {
/* 43 */ events = __9;
/* 44 */ return Model.getAll("kind", "followChange", __cb(_, function(__0, __10) {
/* 44 */ events = events.concat(__10);
/* 45 */ console.log((("Found " + events.length) + " events; deleting..."));
/* 54 */ return (function __3(_) {
var _k, _len3, _results;
/* 48 */ _results = [];
/* 49 */ for (_k = 0, _len3 = events.length; (_k < _len3); _k++) {
/* 50 */ event = events[_k];
/* 51 */ _results.push(event["delete"]());
};
/* 53 */ return _(null, _results);
/* 54 */ })(__cb(_, function(__0, __11) {
/* 46 */ futures = __11;
/* 55 */ console.log("entering second delete loop");
/* 56 */ i = 0;
/* 56 */ _len3 = futures.length;
var __26 = false;
return (function(__break) {
var __loop = __nt(_, function() {
console.log("INSIDE, i=" + i + ", _len3=" + _len3);
if (__26) {
/* 56 */ i++;
}
else {
__26 = true;
}
;
/* 56 */ var __25 = (i < _len3);
if (__25) {
/* 57 */ future = futures[i];
/* 58 */ console.log(("about to delete " + i));
/* 59 */ return future(__cb(_, function() {
/* 60 */ console.log(("finished deleting " + i));
__loop();
}));
}
else {
__break();
}
;
});
__loop();
})(function() {
/* 62 */ console.log("Resetting user followers/following stats...");
/* 63 */ count = 0;
/* 77 */ return (function __4(_) {
var _k, _len4, _results;
/* 66 */ _results = [];
/* 67 */ for (_k = 0, _len4 = users.length; (_k < _len4); _k++) {
/* 68 */ user = users[_k];
/* 69 */ if ((user.stats.numFollowers || user.stats.numFollowing)) {
/* 70 */ count++;
/* 71 */ user.stats.numFollowers = 0;
/* 72 */ user.stats.numFollowing = 0;
}
;
/* 74 */ _results.push(user.save());
};
/* 76 */ return _(null, _results);
/* 77 */ })(__cb(_, function(__0, __12) {
/* 64 */ futures = __12;
/* 78 */ _k = 0;
/* 78 */ _len4 = futures.length;
var __30 = false;
return (function(__break) {
var __loop = __nt(_, function() {
if (__30) {
/* 78 */ _k++;
}
else {
__30 = true;
}
;
/* 78 */ var __29 = (_k < _len4);
if (__29) {
/* 79 */ future = futures[_k];
/* 80 */ return future(__cb(_, __loop));
}
else {
__break();
}
;
});
__loop();
})(function() {
/* 82 */ console.log((("Done! " + count) + " users' stats reset."));
_();
});
}));
});
}));
}));
}));
});
}));
});
}));
}));
}).call(this, __trap);
#!/usr/bin/env coffee-streamline
#
# unfollow_.coffee
# Removes all existing follow connections and follow/unfollow events.
assert = require 'assert'
models = require './models_'
neo4j = require 'neo4j'
Model = models.Model
User = models.User
FollowEvent = models.FollowEvent
# first fetch all users:
console.log "Fetching users..."
users = User.all _
# then get each user's follows relationships in parallel:
console.log "Found #{users.length} users; fetching follows..."
futures = for user in users
user.getFollows()
follows = []
for future in futures
follows = follows.concat future _
# then delete each follows relationship in parallel:
console.log "Found #{follows.length} follows; deleting..."
futures = for follow in follows
follow.delete()
future _ for future in futures
# then fetch all follow events...
console.log "Fetching follow events..."
events = FollowEvent.all _
# then delete these events in parallel:
console.log "Found #{events.length} events; deleting..."
futures = for event in events
event.delete()
console.log 'entering second delete loop'
for future, i in futures
console.log "about to delete #{i}"
future _
console.log "finished deleting #{i}"
# finally, reset user stats:
console.log "Resetting user followers/following stats..."
count = 0
futures = for user in users
if user.stats.numFollowers or user.stats.numFollowing
count++
user.stats.numFollowers = 0
user.stats.numFollowing = 0
user.save()
future _ for future in futures
console.log "Done! #{count} users' stats reset."
var FollowEvent, Model, User, assert, count, event, events, follow, follows, future, futures, i, models, neo4j, user, users, _i, _j, _k, _len, _len2, _len3, _len4;
assert = require('assert');
models = require('./models_');
neo4j = require('neo4j');
Model = models.Model;
User = models.User;
FollowEvent = models.FollowEvent;
console.log("Fetching users...");
users = User.all(_);
console.log("Found " + users.length + " users; fetching follows...");
futures = (function() {
var _i, _len, _results;
_results = [];
for (_i = 0, _len = users.length; _i < _len; _i++) {
user = users[_i];
_results.push(user.getFollows());
}
return _results;
})();
follows = [];
for (_i = 0, _len = futures.length; _i < _len; _i++) {
future = futures[_i];
follows = follows.concat(future(_));
}
console.log("Found " + follows.length + " follows; deleting...");
futures = (function() {
var _j, _len2, _results;
_results = [];
for (_j = 0, _len2 = follows.length; _j < _len2; _j++) {
follow = follows[_j];
_results.push(follow["delete"]());
}
return _results;
})();
for (_j = 0, _len2 = futures.length; _j < _len2; _j++) {
future = futures[_j];
future(_);
}
console.log("Fetching follow events...");
events = FollowEvent.all(_);
console.log("Found " + events.length + " events; deleting...");
futures = (function() {
var _k, _len3, _results;
_results = [];
for (_k = 0, _len3 = events.length; _k < _len3; _k++) {
event = events[_k];
_results.push(event["delete"]());
}
return _results;
})();
console.log('entering second delete loop');
for (i = 0, _len3 = futures.length; i < _len3; i++) {
future = futures[i];
console.log("about to delete " + i);
future(_);
console.log("finished deleting " + i);
}
console.log("Resetting user followers/following stats...");
count = 0;
futures = (function() {
var _k, _len4, _results;
_results = [];
for (_k = 0, _len4 = users.length; _k < _len4; _k++) {
user = users[_k];
if (user.stats.numFollowers || user.stats.numFollowing) {
count++;
user.stats.numFollowers = 0;
user.stats.numFollowing = 0;
}
_results.push(user.save());
}
return _results;
})();
for (_k = 0, _len4 = futures.length; _k < _len4; _k++) {
future = futures[_k];
future(_);
}
console.log("Done! " + count + " users' stats reset.");
Fetching users...
Found 68 users; fetching follows...
Found 44 follows; deleting...
Fetching follow events...
Found 46 events; deleting...
about to delete follow event @1880...
about to delete follow event @1939...
about to delete follow event @1940...
about to delete follow event @1938...
about to delete follow event @1937...
about to delete follow event @1936...
about to delete follow event @1935...
about to delete follow event @1934...
about to delete follow event @1933...
about to delete follow event @1932...
about to delete follow event @1929...
about to delete follow event @1928...
about to delete follow event @1930...
about to delete follow event @1931...
about to delete follow event @1927...
about to delete follow event @1896...
about to delete follow event @1873...
about to delete follow event @1874...
about to delete follow event @1922...
about to delete follow event @1872...
about to delete follow event @1871...
about to delete follow event @1870...
about to delete follow event @1869...
about to delete follow event @1868...
about to delete follow event @1867...
about to delete follow event @1866...
about to delete follow event @1864...
about to delete follow event @1863...
about to delete follow event @1865...
about to delete follow event @1862...
about to delete follow event @1861...
about to delete follow event @1860...
about to delete follow event @1858...
about to delete follow event @1859...
about to delete follow event @1857...
about to delete follow event @1851...
about to delete follow event @1854...
about to delete follow event @1855...
about to delete follow event @1856...
about to delete follow event @1850...
about to delete follow event @1849...
about to delete follow event @1846...
about to delete follow event @1845...
about to delete follow event @1848...
about to delete follow event @1847...
about to delete follow event @1844...
entering second delete loop
INSIDE, i=0, _len3=46
about to delete 0
finished deleting follow event @1940.
finished deleting follow event @1880.
finished deleting 0
INSIDE, i=0, _len3=46
about to delete 1
finished deleting follow event @1937.
finished deleting follow event @1939.
finished deleting 1
INSIDE, i=1, _len3=46
about to delete 2
finished deleting 2
INSIDE, i=2, _len3=46
about to delete 3
finished deleting follow event @1938.
finished deleting 3
INSIDE, i=3, _len3=46
about to delete 4
finished deleting 4
INSIDE, i=4, _len3=46
about to delete 5
finished deleting follow event @1936.
finished deleting 5
INSIDE, i=5, _len3=46
about to delete 6
finished deleting follow event @1933.
finished deleting follow event @1935.
finished deleting 6
INSIDE, i=6, _len3=46
about to delete 7
finished deleting follow event @1929.
finished deleting follow event @1928.
finished deleting follow event @1934.
finished deleting 7
INSIDE, i=7, _len3=46
about to delete 8
finished deleting 8
INSIDE, i=8, _len3=46
about to delete 9
finished deleting follow event @1932.
finished deleting 9
INSIDE, i=9, _len3=46
about to delete 10
finished deleting 10
INSIDE, i=10, _len3=46
about to delete 11
finished deleting 11
INSIDE, i=11, _len3=46
about to delete 12
finished deleting follow event @1931.
finished deleting follow event @1930.
finished deleting 12
INSIDE, i=12, _len3=46
about to delete 13
finished deleting 13
INSIDE, i=13, _len3=46
about to delete 14
finished deleting follow event @1927.
finished deleting 14
INSIDE, i=14, _len3=46
about to delete 15
finished deleting follow event @1873.
finished deleting follow event @1874.
finished deleting follow event @1872.
finished deleting follow event @1896.
finished deleting 15
INSIDE, i=15, _len3=46
about to delete 16
finished deleting 16
INSIDE, i=16, _len3=46
about to delete 17
finished deleting 17
INSIDE, i=17, _len3=46
about to delete 18
finished deleting follow event @1922.
finished deleting 18
INSIDE, i=18, _len3=46
about to delete 19
finished deleting 19
INSIDE, i=19, _len3=46
about to delete 20
finished deleting follow event @1870.
finished deleting follow event @1868.
finished deleting follow event @1871.
finished deleting 20
INSIDE, i=20, _len3=46
about to delete 21
finished deleting 21
INSIDE, i=21, _len3=46
about to delete 22
finished deleting follow event @1869.
finished deleting 22
INSIDE, i=22, _len3=46
about to delete 23
finished deleting 23
INSIDE, i=23, _len3=46
about to delete 24
finished deleting follow event @1863.
finished deleting follow event @1866.
finished deleting follow event @1867.
finished deleting 24
INSIDE, i=24, _len3=46
about to delete 25
finished deleting 25
INSIDE, i=25, _len3=46
about to delete 26
finished deleting follow event @1864.
finished deleting 26
INSIDE, i=26, _len3=46
about to delete 27
finished deleting 27
INSIDE, i=27, _len3=46
about to delete 28
finished deleting follow event @1865.
finished deleting 28
INSIDE, i=28, _len3=46
about to delete 29
finished deleting follow event @1862.
finished deleting 29
INSIDE, i=29, _len3=46
about to delete 30
finished deleting follow event @1861.
finished deleting 30
INSIDE, i=30, _len3=46
about to delete 31
finished deleting follow event @1860.
finished deleting 31
INSIDE, i=31, _len3=46
about to delete 32
finished deleting follow event @1857.
finished deleting follow event @1859.
finished deleting follow event @1858.
finished deleting 32
INSIDE, i=32, _len3=46
about to delete 33
finished deleting 33
INSIDE, i=33, _len3=46
about to delete 34
finished deleting 34
INSIDE, i=34, _len3=46
about to delete 35
finished deleting follow event @1851.
finished deleting 35
INSIDE, i=35, _len3=46
about to delete 36
finished deleting follow event @1855.
finished deleting follow event @1854.
finished deleting 36
INSIDE, i=36, _len3=46
about to delete 37
finished deleting 37
INSIDE, i=37, _len3=46
about to delete 38
finished deleting follow event @1850.
finished deleting follow event @1849.
finished deleting follow event @1856.
finished deleting 38
INSIDE, i=38, _len3=46
about to delete 39
finished deleting 39
INSIDE, i=39, _len3=46
about to delete 40
finished deleting 40
INSIDE, i=40, _len3=46
about to delete 41
finished deleting follow event @1845.
about to delete node @1940...
finished deleting follow event @1848.
finished deleting follow event @1846.
finished deleting 41
INSIDE, i=41, _len3=46
about to delete 42
finished deleting 42
INSIDE, i=42, _len3=46
about to delete 43
finished deleting 43
INSIDE, i=43, _len3=46
about to delete 44
about to delete node @1937...
about to delete node @1880...
finished deleting follow event @1847.
finished deleting 44
INSIDE, i=44, _len3=46
about to delete 45
about to delete node @1936...
about to delete node @1938...
about to delete node @1939...
about to delete node @1933...
finished deleting follow event @1844.
finished deleting 45
INSIDE, i=45, _len3=46
Resetting user followers/following stats...
about to delete node @1935...
about to delete node @1928...
about to delete node @1929...
about to delete node @1931...
about to delete node @1932...
about to delete node @1934...
about to delete node @1930...
about to delete node @1927...
about to delete node @1874...
about to delete node @1922...
about to delete node @1896...
about to delete node @1872...
about to delete node @1873...
about to delete node @1870...
about to delete node @1868...
about to delete node @1871...
about to delete node @1869...
about to delete node @1866...
about to delete node @1863...
about to delete node @1867...
about to delete node @1864...
about to delete node @1865...
about to delete node @1861...
about to delete node @1862...
about to delete node @1860...
about to delete node @1857...
about to delete node @1859...
about to delete node @1858...
about to delete node @1851...
about to delete node @1855...
about to delete node @1854...
about to delete node @1850...
about to delete node @1849...
about to delete node @1856...
about to delete node @1845...
about to delete node @1848...
about to delete node @1846...
finished deleting node @1940.
about to delete node @1847...
finished deleting node @1937.
finished deleting node @1936.
finished deleting 46
INSIDE, i=46, _len3=46
Resetting user followers/following stats...
finished deleting node @1933.
finished deleting node @1939.
finished deleting 47
INSIDE, i=47, _len3=46
Resetting user followers/following stats...
finished deleting node @1938.
finished deleting 48
INSIDE, i=48, _len3=46
Resetting user followers/following stats...
finished deleting node @1880.
finished deleting 49
INSIDE, i=49, _len3=46
Resetting user followers/following stats...
about to delete node @1844...
finished deleting node @1935.
finished deleting 50
INSIDE, i=50, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1932.
finished deleting 51
INSIDE, i=51, _len3=46
Resetting user followers/following stats...
finished deleting node @1928.
Done! 0 users' stats reset.
finished deleting node @1931.
finished deleting node @1929.
finished deleting node @1934.
finished deleting 52
INSIDE, i=52, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1930.
finished deleting 53
INSIDE, i=53, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1927.
finished deleting 54
INSIDE, i=54, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1874.
finished deleting node @1896.
finished deleting 55
INSIDE, i=55, _len3=46
Resetting user followers/following stats...
finished deleting node @1922.
finished deleting 56
INSIDE, i=56, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
Done! 0 users' stats reset.
finished deleting node @1870.
finished deleting node @1873.
finished deleting node @1872.
finished deleting node @1868.
finished deleting node @1866.
finished deleting node @1869.
finished deleting 57
INSIDE, i=57, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1863.
finished deleting node @1871.
finished deleting 58
INSIDE, i=58, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1867.
finished deleting 59
INSIDE, i=59, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1864.
finished deleting 60
INSIDE, i=60, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1865.
finished deleting 61
INSIDE, i=61, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1861.
finished deleting 62
INSIDE, i=62, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1862.
finished deleting 63
INSIDE, i=63, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1860.
finished deleting 64
INSIDE, i=64, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1857.
finished deleting node @1859.
finished deleting node @1858.
finished deleting 65
INSIDE, i=65, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1851.
finished deleting 66
INSIDE, i=66, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1855.
finished deleting node @1854.
finished deleting 67
INSIDE, i=67, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1850.
finished deleting node @1849.
finished deleting node @1856.
finished deleting 68
INSIDE, i=68, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1845.
finished deleting node @1848.
finished deleting node @1846.
finished deleting 69
INSIDE, i=69, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
finished deleting node @1847.
finished deleting 70
INSIDE, i=70, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
Done! 0 users' stats reset.
Done! 0 users' stats reset.
Done! 0 users' stats reset.
Done! 0 users' stats reset.
Done! 0 users' stats reset.
finished deleting node @1844.
finished deleting 71
INSIDE, i=71, _len3=46
Resetting user followers/following stats...
Done! 0 users' stats reset.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment