remove cleanup shard logic

This commit is contained in:
Skillz4Killz
2021-05-23 20:14:15 +00:00
committed by GitHub
parent 59d35230b1
commit 4e9cbd06f5
6 changed files with 71 additions and 56 deletions

38
nayeem.ts Normal file
View File

@@ -0,0 +1,38 @@
interface Info {
root: string;
modules: {
specifier: string;
dependencies: { specifier: string }[];
}[];
}
const info = JSON.parse(new TextDecoder().decode(await Deno.readAll(Deno.stdin))) as Info;
const dependencyMap = new Map(
info.modules.map((module) => [
module.specifier,
module.dependencies.map(({ specifier }) => new URL(specifier, module.specifier).href),
])
);
const walking = new Set<string>();
const walked = new Set<string>();
function walk(module: string) {
walking.add(module);
for (const dependency of dependencyMap.get(module)!) {
if (walking.has(dependency)) {
// Reporting cycle.
const cycleArray = [...walking];
const cycleIndex = cycleArray.indexOf(dependency);
cycleArray.splice(0, cycleIndex);
cycleArray.push(dependency);
console.log(`🔁 ${cycleArray.join(" \n=> ")}`);
console.log("=========")
} else if (!walked.has(dependency)) {
walk(dependency);
}
}
walking.delete(module);
walked.add(module);
}
walk(info.root);

View File

@@ -1,31 +1,31 @@
import { DiscordenoChannel } from "../../structures/channel.ts";
import { DiscordenoGuild } from "../../structures/guild.ts";
import { DiscordenoMember } from "../../structures/member.ts";
import { DiscordenoMessage } from "../../structures/message.ts";
import { DiscordenoRole } from "../../structures/role.ts";
import { Collection } from "../../util/collection.ts";
import { PresenceUpdate } from "../activity/presence_update.ts";
import { StageInstance } from "../channels/stage_instance.ts";
import { ThreadMember } from "../channels/threads/thread_member.ts";
import { ThreadMembersUpdate } from "../channels/threads/thread_members_update.ts";
import { Emoji } from "../emojis/emoji.ts";
import { GatewayPayload } from "../gateway/gateway_payload.ts";
import { DiscordGatewayPayload } from "../gateway/gateway_payload.ts";
import { IntegrationCreateUpdate } from "../integrations/integration_create_update.ts";
import { IntegrationDelete } from "../integrations/integration_delete.ts";
import { ApplicationCommandCreateUpdateDelete } from "../interactions/commands/application_command_create_update_delete.ts";
import { Interaction } from "../interactions/interaction.ts";
import { InviteCreate } from "../invites/invite_create.ts";
import { InviteDelete } from "../invites/invite_delete.ts";
import { MessageReactionAdd } from "../messages/message_reaction_add.ts";
import { MessageReactionRemove } from "../messages/message_reaction_remove.ts";
import { MessageReactionRemoveAll } from "../messages/message_reaction_remove_all.ts";
import { TypingStart } from "../misc/typing_start.ts";
import { User } from "../users/user.ts";
import { VoiceServerUpdate } from "../voice/voice_server_update.ts";
import { VoiceState } from "../voice/voice_state.ts";
import { DebugArg } from "./debug_arg.ts";
import { GuildUpdateChange } from "./guild_update_change.ts";
import type { DiscordenoChannel } from "../../structures/channel.ts";
import type { DiscordenoGuild } from "../../structures/guild.ts";
import type { DiscordenoMember } from "../../structures/member.ts";
import type { DiscordenoMessage } from "../../structures/message.ts";
import type { DiscordenoRole } from "../../structures/role.ts";
import type { Collection } from "../../util/collection.ts";
import type { PresenceUpdate } from "../activity/presence_update.ts";
import type { StageInstance } from "../channels/stage_instance.ts";
import type { ThreadMember } from "../channels/threads/thread_member.ts";
import type { ThreadMembersUpdate } from "../channels/threads/thread_members_update.ts";
import type { Emoji } from "../emojis/emoji.ts";
import type { GatewayPayload } from "../gateway/gateway_payload.ts";
import type { DiscordGatewayPayload } from "../gateway/gateway_payload.ts";
import type { IntegrationCreateUpdate } from "../integrations/integration_create_update.ts";
import type { IntegrationDelete } from "../integrations/integration_delete.ts";
import type { ApplicationCommandCreateUpdateDelete } from "../interactions/commands/application_command_create_update_delete.ts";
import type { Interaction } from "../interactions/interaction.ts";
import type { InviteCreate } from "../invites/invite_create.ts";
import type { InviteDelete } from "../invites/invite_delete.ts";
import type { MessageReactionAdd } from "../messages/message_reaction_add.ts";
import type { MessageReactionRemove } from "../messages/message_reaction_remove.ts";
import type { MessageReactionRemoveAll } from "../messages/message_reaction_remove_all.ts";
import type { TypingStart } from "../misc/typing_start.ts";
import type { User } from "../users/user.ts";
import type { VoiceServerUpdate } from "../voice/voice_server_update.ts";
import type { VoiceState } from "../voice/voice_state.ts";
import type { DebugArg } from "./debug_arg.ts";
import type { GuildUpdateChange } from "./guild_update_change.ts";
export type EventHandlersDefinitions = {
/** Sent when a new Slash Command is created, relevant to the current user. */

View File

@@ -174,8 +174,6 @@ export const ws = {
log,
/** Handles resharding the bot when necessary. */
resharder,
/** Cleanups loading shards that were unable to load. */
cleanupLoadingShards,
};
export interface DiscordenoShard {

View File

@@ -1,20 +0,0 @@
import { ws } from "./ws.ts";
/** The handler to clean up shards that identified but never received a READY. */
export function cleanupLoadingShards() {
if (!ws.loadingShards.size) return;
ws.log("DEBUG", "Running setTimeout in cleanupLoadingShards function.");
const now = Date.now();
ws.loadingShards.forEach((loadingShard) => {
ws.log("DEBUG", `Running forEach loop in cleanupLoadingShards function.`);
// Not a minute yet. Max should be few seconds but do a minute to be safe.
if (now < loadingShard.startedAt + 60000) return;
loadingShard.reject(
`[Identify Failure] Shard ${loadingShard.shardId} has not received READY event in over a minute.`
);
});
if (ws.loadingShards.size) setTimeout(cleanupLoadingShards, 10000);
}

View File

@@ -54,10 +54,13 @@ export function identify(shardId: number, maxShards: number) {
ws.loadingShards.set(shardId, {
shardId,
resolve,
reject,
startedAt: Date.now(),
});
ws.cleanupLoadingShards();
setTimeout(() => {
reject(
`[Identify Failure] Shard ${shardId} has not received READY event in over a minute.`
);
}, 600000);
});
}

View File

@@ -1,6 +1,5 @@
import { DiscordGatewayOpcodes } from "../types/codes/gateway_opcodes.ts";
import { Collection } from "../util/collection.ts";
import { cleanupLoadingShards } from "./cleanup_loading_shards.ts";
import { closeWS } from "./close_ws.ts";
import { createShard } from "./create_shard.ts";
import { log } from "./events.ts";
@@ -78,7 +77,6 @@ export const ws = {
{
shardId: number;
resolve: (value: unknown) => void;
reject: (reason?: unknown) => void;
startedAt: number;
}
>(),
@@ -112,8 +110,6 @@ export const ws = {
log,
/** Handles resharding the bot when necessary. */
resharder,
/** Cleanups loading shards that were unable to load. */
cleanupLoadingShards,
/** Handles the message events from websocket. */
handleOnMessage,
/** Handles processing queue of requests send to this shard. */